[英]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.