array_mergeとarray+arrayの挙動の違いを検証してみました
array_mergeとarray+arrayの挙動の違いの理解が曖昧だったので検証してみました。
例1 基本的な配列の場合
<?php $array1 = array(1, 3); $array2 = array(2, 4); $result1 = array_merge($array1, $array2); $result2 = $array1 + $array2; print_r($result1); print_r($result2); ?> Array ( [0] => 1 [1] => 3 [2] => 2 [3] => 4 ) Array ( [0] => 1 [1] => 3 )
結果
array_merge
キーが同じでも完全にマージされている。
array1 + array2
両方の配列に同じキーが存在する場合は前方の配列が残り、 後方の配列は無視されている。
例2 連想配列の場合
<?php $array1 = array('color'=>'red', 'shape'=>'circle'); $array2 = array('color'=>'green', 'shape'=>'rectangle'); $result1 = array_merge($array1, $array2); $result2 = $array1 + $array2; print_r($result1); print_r($result2); ?>
Array ( [color] => green [shape] => rectangle ) Array ( [color] => red [shape] => circle )
結果
array_merge
両方の配列に同じキーが存在する場合は、後方の配列が優先される。
array1 + array2
両方の配列に同じキーが存在する場合は、前方の配列が優先される。
例3 ネストした配列の場合
<?php $array1 = array('color'=>'red', 'shape'=>'circle', array('option'=>'cut', 'element'=>'chromium')); $array2 = array('color'=>'green', 'shape'=>'rectangle', array('option'=>'paste', 'area'=>'top')); $result1 = array_merge($array1, $array2); $result2 = $array1 + $array2; print_r($result1); print_r($result2); ?> Array ( [color] => green [shape] => rectangle [0] => Array ( [option] => cut [element] => chromium ) [1] => Array ( [option] => paste [area] => top ) ) Array ( [color] => red [shape] => circle [0] => Array ( [option] => cut [element] => chromium ) )
結果
array_merge
ネストした配列はキーがそれぞれふられ、全てマージされる。
array1 + array2
ネストした配列は、前方の配列が優先される。
結論
array_mergeとarray+arrayは似ているようで、挙動が異なる。
なんとなくで使用すると、バグの温床になる可能性があるので注意する。