PHP数组合并之array_merge 和 数组相加

Published on:
Tags: php

数组合并一般会使用 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
)