9

次の配列があるとしましょう:

Array
    (
        [0] => Array
            (
                [id] => 5
                [name] => Education
            )

        [1] => Array
            (
                [id] => 4
                [name] => Computers
            )

        [3] => Array
            (
                [id] => 7
                [name] => Science

        [4] => Array
            (
                [id] => 1
                [name] => Sports
            )
    )

そして2番目のもの:

Array
    (
        [0] => Array
            (
                [id] => 1
                [title] => Sport
            )

        [1] => Array
            (
                [id] => 7
                [title] => Sci
            )

        [3] => Array
            (
                [id] => 4
                [title] => Comp

        [4] => Array
            (
                [id] => 5
                [title] => Edu
            )
    )

そして、望ましい出力は次のとおりです。

Array
    (
        [0] => Array
            (
                [id] => 5
                [name] => Education
                [title] => Edu
            )

        [1] => Array
            (
                [id] => 4
                [name] => Computers
                [title] => Comp
            )

        [3] => Array
            (
                [id] => 7
                [name] => Science
                [title] => Sci

        [4] => Array
            (
                [id] => 1
                [name] => Sports
                [title] => Sport
            )
    )

これらの配列を簡単にマージすることができました:

foreach($first as $key => $value){
    $result[$key] = array_merge($first[$key], $second[$key]);
}

しかし、出力は正しく結合されていません:

Array
    (
        [0] => Array
            (
                [id] => 5
                [name] => Education
                [title] => Sport
            )

        [1] => Array
            (
                [id] => 4
                [name] => Computers
                [title] => Sci
            )

        [3] => Array
            (
                [id] => 7
                [name] => Science
                [title] => Comp

        [4] => Array
            (
                [id] => 1
                [name] => Sports
                [title] => Edu
            )
    )

問題は、これらの配列を同じにマージしたいということidです。必要な出力の並べ替えは、最初の配列と同じにする必要があります。

どうすればこれを達成できますか?どんな助けでも大歓迎です。

4

7 に答える 7

10

ネストされたループを実行して、id値が一致するかどうかを確認してから、に追加titleすることができます$first(またはname$second)

foreach($first as $key => $value){
    foreach($second as $value2){
        if($value['id'] === $value2['id']){
            $first[$key]['title'] = $value2['title'];
        }               
    }
}
于 2012-12-02T13:28:07.410 に答える
2

あなたのコードは正常に動作します。あなたの期待は単に間違っています。たとえば、ある配列では 4 番目の要素idは 1 を保持しますが、別の配列では 4 番目の要素idは 5 であるため、「同じ ID でこれらの配列をマージする」ことは意味がありませんid。両方の配列で、配列に2つの等しいキーが存在できないため、一度値を削除する必要があります。

編集

コンテンツに基づいてマージする場合は、PHP 関数がキーに基づいてマージするため、手動でマージする必要があります。

$result = array();
foreach( $arrayA as $keyA => $valA ) {
  foreach( $arrayB as $keyB => $valB ) {
     if( $valA['id'] == $valB['id'] ) {
       $result[$keyA] = $valA + $valB;

       // or if you do not care output keys, just
       // $result[] = $valA + $valB;
     }
  }
}
于 2012-12-02T13:14:52.020 に答える