PHPにおけるarray_mergeと+(プラス)の違い

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みたいな動きになるのでした。
これは分かっていないと余計なバグを生み出す可能性があるので気をつけましょう。

Author Info(オガティ

エンジニアとして勤め、インフラ周りの開発を経た後Web業界へ異動。
プライベートでもブログ「ogatism」の運営や電子書籍の執筆、占星術師としての活動など幅広い分野で活動中。
詳細はこちら

占い鑑定レポート作成サービス受付中

◆ ogatismをFeedlyに登録 ◆
follow us in feedly