0

PHP で 2 つの 2D 配列を比較する必要があります。配列は次のようになります。

Array one
ID Name
11 Aa 
11 Ab
12 Bb
13 Cc
14 Dd
15 Ee

Array two
ID Content
11 Cat
13 Dog
14 Donkey

次に、これら 2 つを次のような配列に結合する必要があります。

ID Name Conent
11 Aa Cat
11 Ab Cat
12 Bb
13 Cc Dog
14 Dd Donkey
15 Ee

どうすればこれを達成できますか? 私は array_merge() または $array3 = $array1 + $array2; でうまくいきませんでした。

4

5 に答える 5

4

簡単な方法は、最初の配列を繰り返し処理し、2番目の配列の値を追加することです。

$array1 = array('11' => 'Aa', '12' => 'Bb', '13' => 'Cc', '14' => 'Dd', '15' => 'Ee');
$array2 = array('11' => 'Cat', '13' => 'Dog', '14' => 'Donkey');

$combined = array();
foreach ($array1 as $key => $val) {
    $combined[$key] = $val . (isset($array2[$key]) ? ' '.$array2[$key] : '');
}

これにより、のすべてのキー/値がループされ、配列$array1に追加されます。$combinedの値が同じインデックスで存在する場合、スペースで区切られて、$array2からの値に追加されます。$array1

更新:(再び)配列の形式を読み間違えました。配列内の実際のインデックスであると想定IDしましたが、配列出力の例にはNameとの両方があるため、配列自体のインデックスではなく、実際のインデックス文字列値であるとContent想定しています。IDループシナリオに固執するために、最初の配列を反復処理し、ネストされたループを2番目の配列を反復処理することができます。

$array1 = array(
        array('ID' => '11', 'Name' => 'Aa'),
        array('ID' => '12', 'Name' => 'Bb'),
        array('ID' => '13', 'Name' => 'Cc'),
        array('ID' => '14', 'Name' => 'Dd'),
        array('ID' => '15', 'Name' => 'Ee'),
    );
$array2 = array(
        array('ID' => '11', 'Content' => 'Cat'),
        array('ID' => '13', 'Content' => 'Dog'),
        array('ID' => '14', 'Content' => 'Donkey')
    );

$combined = array();
foreach ($array1 as $arr) {
        $comb = array('ID' => $arr['ID'], 'Name' => $arr['Name'], 'Content' => '');
        foreach ($array2 as $arr2) {
            if ($arr2['ID'] == $arr['ID']) {
                $comb['Content'] = $arr2['Content'];
                break;
            }
        }
    $combined[] = $comb;
}

これにより、すべての値が結合された配列に追加され、の値に同じフィールドが含まれて$array1いる場合にのみ、そのフィールドも配列に追加されます。これを拡張して、名前で、または代わりにinner-ifブロックを(存在しないすべてのインデックスをマージする必要がある)に変更することで、任意の数のフィールドを処理することもできます。$array2IDContent$comb += $arr2;

于 2012-07-24T15:15:51.703 に答える
1
$result = array_map (
  function ($item) { return is_array($item) ? implode(' ', $item) : $item; },
  array_merge_recursive($array1, $array2);
);

両方の配列に文字列キーが必要であることに注意してください

于 2012-07-24T15:15:57.263 に答える
1

独自の関数を作成する必要があります。

function putThemTogether($array1, $array2) {
    $output = array();
    foreach($array1 as $key => $value) {
        if (!isset($output[$key]))
            $output[$key] = array();
        $output[$key][] = $value;
    }
    foreach($array2 as $key => $value) {
        if (!isset($output[$key]))
            $output[$key] = array();
        $output[$key][] = $value;
    }
    return $output;
}

これをより良くするために、任意の数の引数を取ることができます。

于 2012-07-24T15:15:32.393 に答える
0

これを試してくださいうまくいくといいのですが

function merge_two_arrays($array1,$array2) {
    $data = array();
    $arrayAB = array_merge($array1,$array2);
    foreach ($arrayAB as $value) {
        // This assumes there is a field called "id"
        $id = $value['id'];
        if (!isset($data[$id])) {
            $data[$id] = array();
        }
        $data[$id] = array_merge($data[$id],$value);
    }
    return $data;
}

$master_array = merge_two_arrays($array1,$array2);
于 2019-02-11T13:36:33.447 に答える