我为每个循环运行两个并将其中一个循环推入另一个循环。这很好,除非我有一个以上的比赛。在那种情况下,我只得到最后一个。抱歉标题,不太确定如何在一行中调用此问题。
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"
...
}
}
}
}
我做错了什么?
答案 0 :(得分:2)
在循环外取$i
,您的匹配始终存储在$item["fruits"][0]
foreach($items as &$item) {
$i = 0;
foreach($fruits as &$fruit) {
if($fruit['for']==$item['id']) {
$item["fruits"][$i] = $fruit;
$i++;
}
}
}
答案 1 :(得分:1)
对于您检查的每个数组元素,将$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++;
}
}
}
这样,每次找到新匹配时,都会获得一个新密钥。