这个也算是自己在编码中碰到的一个坑
1、键名为数字(数字型字符串)时,array_merge()不会覆盖掉原来的值,但“+”合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉
$arr1 = array('a','b'); $arr2 = array('c', 'd'); var_dump($arr1+$arr2); //输出 array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } var_dump(array_merge($arr1, $arr2)); //输出 array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" } 2、键名为字符(非数字型字符)时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值
$arr1 = array(0 => 'a', 'ab' => 'b'); $arr2 = array('0' => 'c', 'ab' => 'd'); var_dump($arr1+$arr2); //输出 array(2) { [0]=> string(1) "a" ["ab"]=> string(1) "b" } var_dump(array_merge($arr1, $arr2)); array(3) { [0]=> string(1) "a" ["ab"]=> string(1) "d" [1]=> string(1) "c" }