かなり単純な質問です。次の違いは何ですか:
$merged = array_merge($array1, $array2);
と
$merged = $array1 + $array2;
?
違いは次のとおりです。
+
演算子は 2 つの配列の和集合を取りますが、関数array_merge
は和集合を取りますが、重複するキーは上書きされます。
array_merge()
入力配列で見つかったすべての数値キーが、結果の配列で再インデックス化されます。ユニオン演算子+
は再インデックスを引き起こしません。
+ 記号は、配列キーの最初の出現からの値のみを取ります。
array_merge は、配列キーの最後の発生から値を取得します。
例:
$first = ['a'=>'one',
'b'=>'two',
'c'=>'three'];
$second = ['a'=>'fourth',
'b'=>'fifth',
'c'=>'sixth',
'3'=>'number three'];
$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);
$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);
これは以下を出力します:
プラス記号 マージ
配列(4) {
["a"]=>
文字列(3) "1"
["b"]=>
文字列(3) "2"
["c"]=>
文字列(5) "3"
[3]=>
string(12) "ナンバースリー"
}array_merge function merge
array(4) {
["a"]=>
string(6) "4番目"
["b"]=>
string(5) "5番目"
["c"]=>
string(5) "6番目"
[0]=>
string(12) "ナンバー 3"
}
これで注目すべき興味深い点は、 がarray_merge
実際には数字 3 の '3' インデックスを消去していることです。これは文字列ですが、数字であるためです。
したがってarray_merge
、数値インデックスを持つ配列とマージするときは注意してください。鍵を紛失する可能性があります。それらが重要な場合は、それらの前に文字列を付けます。
代わりに次の'3' => 'three'
ようなものを使用します'_3' => 'three'
重複したnon_numericarray_merge
キーを上書きする一方で、上書き$array1 + $array2
しないと思います。