81

私は2つの配列を持っています:

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);

それらをマージして、キーと順序を維持し、インデックスを再作成したくありません!!

このように取得するにはどうすればよいですか?

Array
(
    [a] => new value
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)

array_merge() しようとしましたが、キーは保持されません:

print_r(array_merge($array1, $array2));

Array
(
    [a] => 'new value'
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [0] => 456
)

ユニオン演算子を試してみましたが、その要素は上書きされません:

print_r($array1 + $array2);

Array
(
    [a] => 1   <-- not overwriting
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)

私は場所を入れ替えようとしましたが、私の必要ではなく、順序が間違っています:

print_r($array2 + $array1);

Array
(
    [d] => 4
    [e] => 5
    [f] => 6
    [a] => new value 
    [123] => 456
    [b] => 2
    [c] => 3
)

ループを使いたくないのですが、高性能にする方法はありますか?

4

5 に答える 5

186

あなたが探しているarray_replace()

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
print_r(array_replace($array1, $array2));

PHP 5.3 以降で利用可能です。

アップデート

ユニオン配列演算子も使用できます。それは古いバージョンでも機能し、実際にはより高速かもしれません:

print_r($array2 + $array1);
于 2013-07-04T05:38:01.870 に答える
2

array_replace_recursive()またはarray_replace()あなたが探している機能です

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);


var_dump(array_replace_recursive($array1, $array2));

デモ

于 2013-07-04T05:40:40.663 に答える
-2

私が正しく理解していれば、これは役立つかもしれないと思います:

foreach ($i = 0, $num = count($array2); $i < $num; $i++)
{
  $array = array_merge($array1, $arrar2[$i]);
}
于 2013-07-04T05:26:13.293 に答える