0

我为每个循环运行两个并将其中一个推入另一个循环。这很好用,除非我有不止一场比赛。在那种情况下,我只得到最后一个。对不起标题,不太清楚如何在一行中调用这个问题。

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

我究竟做错了什么?

4

2 回答 2

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++;
        }
    }
}
于 2013-07-15T07:54:10.373 回答
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++;
        }
    }
}

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

于 2013-07-15T07:55:35.800 回答