PHP中array_merge函数和+操作符都可以实现数组合并的功能,但是两者具有一些差异点,如果在工作中没有很好的理解这一点会造成一些困惑。
array_merge是php的函数,而+是运算操作符。两者都完成数组的合并,如果不搞清楚它们之间的不同,在项目中会遇到很多麻烦。下面整理一下它们的差异点:
array_merge和+都是将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
1.如果数组的键包含字符串键名时
采用array_merge时该键名后面的值将覆盖前一个值,采用+时会舍弃掉后一个值而保留前面的值。
2.如果数组的键包含数字键名时
采用array_merge时后面的值不会覆盖前一个值,而是附加到后面,如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。采用+时后面的相同键名的值会被舍弃掉。
以下的例子可以加强理解下:
array_merge的例子:
<?php
$a = array('one'=>'a', 'two'=>'b');
$b = array('one'=>'c', 'four'=>'d');
$c = array(3=>'m', 7=>'n');
$d = array(3=>'o', 23=>'p');
var_dump(array_merge($a,$b));
var_dump(array_merge($c,$d));
var_dump(array_merge($a,$c));
?>
输出:
array(3) {
["one"]=>
string(1) "c"
["two"]=>
string(1) "b"
["four"]=>
string(1) "d"
}
array(4) {
[0]=>
string(1) "m"
[1]=>
string(1) "n"
[2]=>
string(1) "o"
[3]=>
string(1) "p"
}
array(4) {
["one"]=>
string(1) "a"
["two"]=>
string(1) "b"
[0]=>
string(1) "m"
[1]=>
string(1) "n"
}
+的例子:
<?php
$a = array('one'=>'a', 'two'=>'b');
$b = array('one'=>'c', 'four'=>'d');
$c = array(3=>'m', 7=>'n');
$d = array(3=>'o', 23=>'p');
var_dump($a+$b);
var_dump($c+$d);
var_dump($a+$c);
?>
输出:
array(3) {
["one"]=>
string(1) "a"
["two"]=>
string(1) "b"
["four"]=>
string(1) "d"
}
array(3) {
[3]=>
string(1) "m"
[7]=>
string(1) "n"
[23]=>
string(1) "p"
}
array(4) {
["one"]=>
string(1) "a"
["two"]=>
string(1) "b"
[3]=>
string(1) "m"
[7]=>
string(1) "n"