2017-05-15 8 views
3

私は配列の配列を持っています。彼らはセミナーを購読したすべての行の人々です。テーブルの終わりにはいくつかのアップセル製品が追加されています。問題は:時々誰かが2人のために注文し、トランザクションに属するアップセル製品は、人にではなく、両方の人の後ろに参加しています。だから2人にサインアップして2枚のシャツを買うと、リストには2枚のシャツが2回表示されます。ネストされたforeachスコープのブール値が予期しない値を与える

私は考えています:それをループして、アップセルを見つけて、2回目のすべての発生を単純なダブルで取り除いてみましょう。foreachしかし、$firstの値は常にtrueのままです。宣言の下にそれをエコーすると、それはfalseです。私は値を何回かエコーして、コードのコメントに値を加えました。

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 
      } 
     } 
    } 
} 

ここでは何か変わったことはありますか?私の意見では、それは最初にループしてから真であり、次にループが2番目になり、偽になるはずです。

EDITは、結果の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] => [email protected] 
     [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] => [email protected] 
     [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] => [email protected] 
     [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 
    ) 

) 
+0

何$結果 – RST

+0

の構造である!$最初は$まず、真ではfalseです。どうしたの? –

+0

@KrisRoofe 2番目のforeachの2回目の反復で$が最初にfalseになるようにしたいのですが、何とか '$ first = true'で毎回再起動し、最初の反復でfalseに設定されます。 –

答えて

0
... 
$first = true; 
$results1 = $results; 
foreach($results1 as $result2){ 
... 
+0

これは残念なことにdidntの助け! –

関連する問題