【问题标题】:Boolean value in nested foreach scope gives unexpected value嵌套 foreach 范围中的布尔值给出了意外的值
【发布时间】:2017-10-14 03:00:56
【问题描述】:

我有一个数组数组。他们都是订阅研讨会的人。在表的末尾添加了一些追加销售产品。问题是:有时有人订购了 2 个人,而属于一个交易而不是一个人的加售产品在两个人的后面加入。因此,如果我注册 2 个人并购买 2 件衬衫,则列表两次显示 2 件衬衫。

所以我想:让我们循环一下,看看我是否找到了一些追加销售,然后用一个简单的双精度 foreach 删除每一秒出现的情况。但是$first 的值始终保持true。如果我在声明下方回显它是false。我多次重复了这些值,并在代码中添加了 cmets 中的值。

foreach($results as $key => $result){
    if(!empty($result["upsell"])){
        $tid = $result["id"];
        $first = true;
        foreach($results as $result2){
            if($result2["id"] == $tid){
                // ALWAYS TRUE
                if(!$first){
                    $results[$key]["upsell"] = "";
                }
                $first = false;
                // FALSE
            }
        }
    }
}

这里发生了一些奇怪的范围事情吗?在我看来,它应该首先循环并为真,然后再循环并为假。

编辑,添加了print_r 的结果。

Array
(
   [28] => Array
    (
        [id] => 1475
        [transaction_id] => SAME
        [club] => xxxxxxxx
        [event] => Voetbalmiddag 
        [category] => Scoutingdagen
        [date_from] => 2017-05-31
        [date_end] => 2017-05-31
        [first_name] => xxxxxx
        [last_name] => xxxxxx
        [birth_date] => xxxxxxx
        [email] => xxxx@hotmail.com
        [address] => xxxxx
        [zipcode] => 8xxxxx
        [city] => xxxxxx
        [phone] => xxxxxx
        [soccer_club] => xxxxxxx
        [soccer_team] => MP JO7-2
        [position] => field
        [printed] => 0
        [print_name] =>  
        [print_number] =>  
        [shirt_size] => 
        [sock_size] => 
        [pants_size] => 
        [referral] => Via de sportvereniging
        [comments] =>  
        [status] => paid
        [upsell] => 2 Shirt
    )

[29] => Array
    (
        [id] => 1476
        [transaction_id] => SAME
        [club] => xxxxxxx
        [event] => Voetbalmiddag
        [category] => Scoutingdagen
        [date_from] => 2017-05-31
        [date_end] => 2017-05-31
        [first_name] => xxxx
        [last_name] => xxxxxxx
        [birth_date] => xxxxxxx
        [email] => xxxxx@hotmail.com
        [address] => Ixxxxx
        [zipcode] => xxxxx
        [city] => xxxxxx
        [phone] => xxxxx
        [soccer_club] => xxxxx
        [soccer_team] => MP JO9-9
        [position] => keeper
        [printed] => 0
        [print_name] =>  
        [print_number] =>  
        [shirt_size] => 
        [sock_size] => 
        [pants_size] => 
        [referral] => Via de sportvereniging
        [comments] =>  
        [status] => paid
        [upsell] => 2 Shirt
    )

[50] => Array
    (
        [id] => 1468
        [transaction_id] => xxxxxxx
        [club] => xxxxxxxxxxx
        [event] => Voetbalmiddag
        [category] => Scoutingdagen
        [date_from] => 2017-05-31
        [date_end] => 2017-05-31
        [first_name] => xxxxx
        [last_name] => xxxxx
        [birth_date] => xxxxx
        [email] => x@gmail.com
        [address] => xxxx 35
        [zipcode] => xxxx
        [city] => xxxxx
        [phone] => xxxxx
        [soccer_club] => xxxx
        [soccer_team] => jo11-5
        [position] => field
        [printed] => 0
        [print_name] =>  
        [print_number] =>  
        [shirt_size] => 
        [sock_size] => 
        [pants_size] => 
        [referral] => Via de flyer
        [comments] =>  
        [status] => open
        [upsell] => 1 Shirt
    )

)

【问题讨论】:

  • $results的结构是什么
  • !$first 为真,$first 为假。有什么问题?
  • @KrisRoofe 我希望 $first 在第二次 foreach 的第二次迭代中为 false,但不知何故,它每次都以 $first = true 重新启动,而在第一次迭代时它设置为 false。
  • @RST 是一个带有关联数组的数组。
  • 查看演示eval.in/795450

标签: php arrays scope


【解决方案1】:
...
$first = true;
$results1 = $results;  
foreach($results1 as $result2){
...

【讨论】:

  • 不幸的是,这没有帮助!
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多