phpのarray_mergeと+(プラス)は似ているようで動作が違います。
ちょいとそこらへんをまとめてみました。
例えば、
$x = [
'a' => 'aaa',
'b' => 'bbb'
];
$y = [
'a' => 'AAA',
'c' => 'ccc',
];
こんな場合、結果は
array_mergeの場合
array(3) {
["a"]=>
string(3) "AAA"
["b"]=>
string(3) "bbb"
["c"]=>
string(3) "ccc"
}
+の場合
array(3) {
["a"]=>
string(3) "aaa"
["b"]=>
string(3) "bbb"
["c"]=>
string(3) "ccc"
}
と、+は先勝ちですがarray_mergeは後勝ちとなります。
だけで終わってはいけません。
$x = [
'a' => 'aaa',
'b' => 'bbb',
'ddd'
];
$y = [
'a' => 'AAA',
'c' => 'ccc',
'eee'
];
この場合どうなるでしょう。
先程の事例で言うと、'ddd'と'eee'は同じ位置にあるから上書きされる?
と思いきやそうでもない。
array_mergeは
array(5) {
["a"]=>
string(3) "AAA"
["b"]=>
string(3) "bbb"
[0]=>
string(3) "ddd"
["c"]=>
string(3) "ccc"
[1]=>
string(3) "eee"
}
+は
array(4) {
["a"]=>
string(3) "aaa"
["b"]=>
string(3) "bbb"
[0]=>
string(3) "ddd"
["c"]=>
string(3) "ccc"
}
と、+は上書きですがarray_mergeは追加、pushみたいな動きになるのでした。
これは分かっていないと余計なバグを生み出す可能性があるので気をつけましょう。