array_mergeと演算子の違い
PHPで配列を結合する時の方法は様々あるが、その中にarray_merge
と 演算子 による方法がある。
しかし、ともに配列結合に使われるがキーが重複した時に微妙に挙動が異なる。
array_merge
リファレンスには以下のような記載がある通り、キーが重複すると後ろの配列の値が返される。
前の配列の後ろに配列を追加することにより、 ひとつまたは複数の配列の要素をマージし、得られた配列を返します。
入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、 前の値を上書きします。しかし、配列が同じ添字番号を有していても 値は追記されるため、このようなことは起きません。
$array1 = ["key1" => "hoge", "key2" => "huga"];
$array2 = ["key1" => "foo", "key3" => "piyo"];
array_merge($array1, $array2);
// ["key1" => "foo", "key2" => "huga", "key3" => "piyo"]
演算子
一方、演算子の場合はキーが重複すると最初の配列の値が返される。
The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored.
両方の配列に存在するキーについては、左側の配列の要素が使用され、右側の配列の一致する要素は無視される。
$array1 = ["key1" => "hoge", "key2" => "huga"];
$array2 = ["key1" => "foo", "key3" => "piyo"];
$array1 + $array2
// ["key1" => "hoge", "key2" => "huga", "key3" => "piyo"]
まとめ
キーが重複した場合の挙動は以下のようになる。
-
array_merge
:後者の配列の値が返される - 演算子:前者の配列の値が返される
参考