簡體   English   中英

如果每個循環都在內部推多維數組-php

[英]if inside for each loop pushing multidimensional array - php

我為每個循環運行兩個,並將其中一個推入另一個循環。 這項工作正常,除非我的比賽不止一次。 在這種情況下,我只會得到最后一個。 對不起標題,不太確定如何在一行中調用此問題。

foreach($items as &$item) {
    foreach($fruits as &$fruit) {
        $i = 0;
        if($fruit['for']==$item['id']) {
            $item["fruits"][$i] = $fruit;
            $i++;
        }
    }
}

第一個數組:

array(114) {
  [0]=>
  array(5) {
    ["id"]=>
    string(2) "76"
    ...
  }
...
}

第二個數組:

array(47) {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "4"
    ["for"]=>
    string(2) "76"
    ...
  }
  ...
}

通過if($fruit['for']==$item['id'])邏輯的多個匹配,我想要以下輸出。

array(114) {
  [0]=>
  array(6) {
    ["id"]=>
    string(2) "76"
    ...
    ["fruits"]=>
    array(2) {
      [0]=>
      array(5) {
        ["id"]=>
        string(1) "4"
        ["for"]=>
        string(2) "76"
        ...
      }
      [1]=>
      array(5) {
        ["id"]=>
        string(2) "33"
        ["for"]=>
        string(2) "76"
        ...
      }
    }
  }
}

我究竟做錯了什么?

$i帶到循環之外,您的匹配$item["fruits"][0]始終存儲在$item["fruits"][0]

foreach($items as &$item) {
    $i = 0;   
    foreach($fruits as &$fruit) {
        if($fruit['for']==$item['id']) {
            $item["fruits"][$i] = $fruit;
            $i++;
        }
    }
}

您為每個檢查的數組元素將$i設置$i 0。 這會使$i++無效,並且您的第一個匹配項將被覆蓋。 嘗試以下任一方法:

foreach($items as &$item) {
    $i = 0;
    foreach($fruits as &$fruit) {
        if($fruit['for']==$item['id']) {
            $item["fruits"][$i] = $fruit;
            $i++;
        }
    }
}

或這樣:(取決於您確切需要什么)

$i = 0;
foreach($items as &$item) {
    foreach($fruits as &$fruit) {
        if($fruit['for']==$item['id']) {
            $item["fruits"][$i] = $fruit;
            $i++;
        }
    }
}

這樣,每次找到新的匹配項時,它都會獲得一個新的密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM