0

ループごとに 2 つ実行し、そのうちの 1 つを別のループに押し込みます。これは、複数の一致がある場合を除いて、正常に機能します。その場合、私は最後のものだけを取得しています。タイトルについて申し訳ありません。この質問を 1 行で呼び出す方法がよくわかりません。

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

2 番目の配列:

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

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 に答える