PHPの配列はarray_merge()でマージできるが、数値のように+演算子でも結合できる。しかし、微妙に結果が違う。
KEYのある配列の場合
//array_merge
var_dump(array_merge(array('foo' => 1, 'bar' => 2), array('foo' => 3, 'baz' => 4)));
↓
array(3) { ["foo"]=> int(3) ["bar"]=> int(2) ["baz"]=> int(4) }
//+演算子
var_dump(array('foo' => 1, 'bar' => 2) + array('foo' => 3, 'baz' => 4));
↓
array(3) { ["foo"]=> int(1) ["bar"]=> int(2) ["baz"]=> int(4) }
同じKEYがある場合、array_merge()だと後の配列で上書きするのに対し、+演算子だと先の配列が勝つようだ。
KEYのない配列の場合
//array_merge
var_dump(array_merge(array('foo', 'bar'), array('foo', 'baz', 'quux')));
↓
array(5) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "foo" [3]=> string(3) "baz" [4]=> string(4) "quux" }
//+演算子
var_dump(array('foo', 'bar') + array('foo', 'baz', 'quux'));
↓
array(3) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(4) "quux" }
array_merge()は全ての配列の値を入れた配列を作ってくれるが、+演算子だとインデックスをKEYとみなして同じインデックスがある限り先の配列の値しか残らない。
基本的にarray_merge()を使う習慣にしておいた方が無難そうだ。
参考:ひとつまたは複数の配列をマージする - PHP 5.3 日本語マニュアル
0 件のコメント:
コメントを投稿