如果内部为每个循环推多维数组 - php

时间:2013-07-15 07:51:40

标签: php arrays

我为每个循环运行两个并将其中一个循环推入另一个循环。这很好,除非我有一个以上的比赛。在那种情况下,我只得到最后一个。抱歉标题,不太确定如何在一行中调用此问题。

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

我做错了什么?

2 个答案:

答案 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++;
        }
    }
}

这样,每次找到新匹配时,都会获得一个新密钥。