php 两个数组合并与两个数组相加的区别

两个数据合并可以用array_merge函数也可以用+运算符进行合并操作 

$arr1 = array("a"=>"PHP","b"=>"java","python");

$arr2 = array("c" =>"ruby","d" => "c++","go","a"=> "swift");

$arr3 = array_merge($arr1,$arr);

$arr4 = $arr1 + $arr2;

但这两个方法合并数组还是有不小的区别的。

array_merge对数值键不会覆盖,但会对字符键进行覆盖,如果两个数组字符键相同,则先出现的覆盖后出现的。对数字键的值会从0开始重新排列

var_dump($arr3)

打印结果:

array(6) { ["a"]=> string(5) "swift" ["b"]=> string(4) "java" [0]=> string(6) "python" ["c"]=> string(4) "ruby" ["d"]=> string(3) "c++" [1]=> string(2) "go" }

可以看到同字符键a的值值保留了siwft,PHP被丢弃,a键保持不变,python和go原本的数字键都是2,现在重新排成了0和1

而用加号进行数组合并则无论是数字键还是字符键,只要相同首先出现的将被保留,后出现的将被丢弃,且数字键会被重新排序

var_dump($arr4)

打印结果:

array(5) { ["a"]=> string(3) "PHP" ["b"]=> string(4) "java" [0]=> string(6) "python" ["c"]=> string(4) "ruby" ["d"]=> string(3) "c++" }
 

总结:

1、两个数组相加:(+):是用第一个数组覆盖第二个数组中键名字相同的。数字索引和字符串索引(关联数组)都会被覆盖,而且数字索引下标保留。

对于数组相加来说比较简单,无论是数组键还是字符键,键相同的时候:首先出现的键保留值,后面出现的丢弃,并且数字键会重新排序。

2、array_merge:是第二个数组覆盖第一个数组键名相同。数字索引会被保留(+会被直接覆盖掉),而且数字索引被重新排序。

对于array_merge也不难记,就是对于数字键来说,相同时候,不发生覆盖,最后数字键会重新排序。但是如果字符键相同时,后出现的覆盖先出现的(与数组相加相反)。

你可能感兴趣的:(php 两个数组合并与两个数组相加的区别)