数组合并一般会使用 array_merge 函数,其实还有数组相加运算。
二者的区别是:
当数组存在相同字符串键名时,array_merge 函数会覆盖数组元素,数组相加运算不会覆盖数组元素;
当存在相同数字键名时,array_merge 函数会合并所有的元素,并且重新编排键名,数组相加运算依然不会覆盖数组元素。
合并的数组键名互不相同
array_merge 函数和 数组相加运算 都是直接合并数组,返回结果,两种合并数组的方式效果一样。
1 2 3 4 5 6 7 8 9 10
| <?php $arr1 = ['p'=>'php','m'=>'mysql','n'=>'nginx']; $arr2 = ['j'=>'javascript','h'=>'html','c'=>'css']; $arr3 = array_merge($arr1,$arr2); $arr4 = $arr1 + $arr2;
print_r($arr3); print_r($arr4);
?>
|
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Array ( [p] => php [m] => mysql [n] => nginx [j] => javascript [h] => html [c] => css ) Array ( [p] => php [m] => mysql [n] => nginx [j] => javascript [h] => html [c] => css )
|
合并的数组存在相同键名
数组键名是字符串
array_merge 函数在合并每一个元素前,先判断是否已经存在相同键名,存在则 覆盖 同名元素的值,不存在则增加元素。
数组相加运算在合并每一个元素前,先判断是否已经存在相同键名,存在则 跳过 该元素,不存在则增加元素。
1 2 3 4 5 6 7 8 9 10
| <?php $arr1 = ['p'=>'php','m'=>'mysql','n'=>'nginx']; $arr2 = ['j'=>'javascript','n'=>'nginx2','h'=>'html','c'=>'css']; $arr3 = array_merge($arr1,$arr2); $arr4 = $arr1 + $arr2;
print_r($arr3); print_r($arr4);
?>
|
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Array ( [p] => php [m] => mysql [n] => nginx2 [j] => javascript [h] => html [c] => css ) Array ( [p] => php [m] => mysql [n] => nginx [j] => javascript [h] => html [c] => css )
|
数组键名是数字
当数组的键名为空时,PHP会默认键名为数字,默认数字键名与元素的位置有关。
以下两对数组结果一样
1 2 3
| ['php','mysql','nginx'];
[0=>’php’,1=>’mysql’,2=>’nginx'];
|
1 2 3
| ['j'=>'javascript',1=>'php','mysql','nginx',3=>'html'];
['j'=>'javascript',1=>'php’,2=>'mysql',3=>'html'];
|
array_merge 函数在合并每一个元素前,先判断键名类型是否为整型数字,若为整型数字,则增加元素,若为字符串型,则根据字符串键名的算法合并元素。最后再根据元素位置编排数字键名。
数组相加运算合并元素的算法跟键名为字符串的合并算法一样。
1 2 3 4 5 6 7 8 9 10 11
| <?php $arr1 = ['php','mysql','nginx']; $arr2 = ['javascript','nginx2','html','css'];
$arr3 = array_merge($arr1,$arr2); $arr4 = $arr1 + $arr2;
print_r($arr3); print_r($arr4);
?>
|
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Array ( [0] => php [1] => mysql [2] => nginx [3] => javascript [4] => nginx2 [5] => html [6] => css ) Array ( [0] => php [1] => mysql [2] => nginx [3] => css )
|