array_merge/array_merge_recursive/+ 几个数组合并方法的区别
php平时开发中,经常会用到 array_merge来合并两个数组,有时候也会用 + 来合并两个数组,php手册上还有 array_merge_recursive这种合并方法,那么这三者到底有何区别呢?
下面是一个实际的例子
$arrA = ['a'=>1, 'b'=>2, 'c'=>3, 'aab', 'd'=>['are', 'you', 'ok']];
$arrB = [1, 2, 'c'=>4, 'aac', 'd'=>['how','do','you','do']];
$arrC = array_merge($arrA, $arrB);
$arrD = $arrA + $arrB;
$arrE = array_merge_recursive($arrA, $arrB);
var_dump($arrA, $arrB);
print_r($arrC);
print_r($arrD);
print_r($arrE);
echo '<hr/>';
输出结果:
array(5) {
[“a”]=>
int(1)
[“b”]=>
int(2)
[“c”]=>
int(3)
[0]=>
string(3) “aab”
[“d”]=>
array(3) {
[0]=>
string(3) “are”
[1]=>
string(3) “you”
[2]=>
string(2) “ok”
}
}
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[“c”]=>
int(4)
[2]=>
string(3) “aac”
[“d”]=>
array(4) {
[0]=>
string(3) “how”
[1]=>
string(2) “do”
[2]=>
string(3) “you”
[3]=>
string(2) “do”
}
}
Array
(
[a] => 1
[b] => 2
[c] => 4
[0] => aab
[d] => Array
(
[0] => how
[1] => do
[2] => you
[3] => do
)
[1] => 1
[2] => 2
[3] => aac
)
Array
(
[a] => 1
[b] => 2
[c] => 3
[0] => aab
[d] => Array
(
[0] => are
[1] => you
[2] => ok
)
[1] => 2
[2] => aac
)
Array
(
[a] => 1
[b] => 2
[c] => Array
(
[0] => 3
[1] => 4
)
[0] => aab
[d] => Array
(
[0] => are
[1] => you
[2] => ok
[3] => how
[4] => do
[5] => you
[6] => do
)
[1] => 1
[2] => 2
[3] => aac
)
结论:
三者的 不同之处:
-
如果有相同键的元素,array_merge以后一个数组的值为准,+ 以前一个数组的值为准,
array_merge_recursive则会合并多个元素到一个数组里 -
如果是数字索引的元素, 如果下标相同,array_merge会顺延下标,但是 + 会用前一个数组的值覆盖后一个数组中的相同下标的值,array_merge_recursive也会顺延下标
-
所以array_merge后的元素总个数会比 + 操作后的元素多一些
array_merge_recursive是唯一不丢失两个数组中任一个元素的合并方法。