PHP数组合并函数(+)
、array_merge
、array_merge_recursive
PHP
中,有3种方法来进行数组合并:操作符(+)
、array_merge
、array_merge_recursive
,其中前两种方式为一维数组的合并,第三种为递归合并。
在说PHP
的数组合并之前,先要明白,PHP
的数组分为索引数组和关联数组。
- 索引数组是指没有键值和键值为数字的数组。
- 关联数组是指键值为字符的数组。
下面说说操作符(+)
和array_merge
的区别:
当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,
array_merge
则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。“+”运算符
规则:
: 当两个数组的键名是数字键名或者字符串键名
$c = $a + $b
在$a
后追加($b
在$a
中不存在的键名)键名和值
注意:
1. 不覆盖,只是追加不存在的键名和对应的值
2. 键名不重新索引
3. 无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回例1:数字键名
1 $a = array( 'a', ); $b = array( 'u', ); $c = $a + $b; var_dump($c); output: array(1) { [0]=> string(1) "a" }
例2:数字键名
$a = array( 66=>'a', ); $b = array( 60=>'u', 66=>'c' ); $c = $a + $b; var_dump($c); output: array(2) { [66]=> string(1) "a" [60]=> string(1) "u" }
例3:字符键名
<?php $a = array( 1=>'a', 2=>'b', 'c'=>'c', 'd'=>'d', ); $b = array( 1=>'u', 3=>'v', 'c'=>'w', 'd'=>'x', 'y'=>'y', 60=>'z', ); $c = $a + $b; var_dump($c); ?> output: array(7) { [1]=> string(1) "a" [2]=> string(1) "b" ["c"]=> string(1) "c" ["d"]=> string(1) "d" [3]=> string(1) "v" ["y"]=> string(1) "y" [60]=> string(1) "z" }
当为关联数组时,合并相同字符键值的数组,操作符合并规则是前面的覆盖后面的,array_merge则是后面的覆盖前面的。
$arr5 = array('a'=>'aaaa'); $arr6 = array('a'=>'bbbb'); var_dump($arr5+$arr6); var_dump(array_merge($arr5,$arr6)); 输出: array (size=1) 'a' => string 'aaaa' (length=4) array (size=1) 'a' => string 'bbbb' (length=4)
array_merge()
将一个或多个PHP
数组合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。array_merge_recursive
的合并规则和array_merge
相同,只是array_merge_recursive
支持多维数组的合并。$a = array( 1=>'a', 2=>'b', 'c'=>'c', 'd'=>'d', ); $b = array( 1=>'u', 3=>'v', 'c'=>'w', 'd'=>'x', 'y'=>'y', 60=>'z', ); var_dump(array_merge_recursive($a,$b)); 输出: array (size=8) 0 => string 'a' (length=1) 1 => string 'b' (length=1) 'c' => array (size=2) 0 => string 'c' (length=1) 1 => string 'w' (length=1) 'd' => array (size=2) 0 => string 'd' (length=1) 1 => string 'x' (length=1) 2 => string 'u' (length=1) 3 => string 'v' (length=1) 'y' => string 'y' (length=1) 4 => string 'z' (length=1)