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

Author:

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

Facebook にシェア
Pocket