PHP数组合并函数+、array_merge、array_merge_recursive

我在php学习在使用到最多的数据合并方法就是array_merge、array_merge_recursive函数了,当然还会少用到操作符(+)函数了,下面我来给大家整理一下这几个函数的一些用法.

PHP中,有3种方法来进行数组合并:操作符(+)、array_merge、array_merge_recursive,其中前两种方式为一维数组的合并,第三种为递归合并.

在说PHP的数组合并之前,先要明白,PHP的数组分为索引数组和关联数组。索引数组是指没有键值和键值为数字的数组,关联数组是指键值为字符的数组。

下面说说操作符(+)和array_merge的区别:

1.当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,array_merge则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。

1、“+”运算符

规则:当两个数组的键名是数字键名或者字符串键名 $c = $a + $b 在$a后追加($b在$a中不存在的键名)键名和值

注意:1、不覆盖,只是追加不存在的键名和对应的值 2、键名不重新索引 3、无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回.

例1:数字键名,代码如下:

  1. $a = array(
  2. 'a',
  3. );
  4. $b = array(
  5. 'u',
  6. );
  7. $c = $a + $b;
  8. var_dump($c);
  9. output:
  10. array(1) {
  11. [0]=>
  12. string(1) "a"
  13. }

例2:数字键名,代码如下:

  1. $a = array(
  2. 66=>'a',
  3. );
  4. $b = array(
  5. 60=>'u',
  6. 66=>'c'
  7. );
  8. $c = $a + $b;
  9. var_dump($c);
  10. output:
  11. array(2) {
  12. [66]=>
  13. string(1) "a"
  14. [60]=>
  15. string(1) "u"
  16. }

例3:字符键名,代码如下:

  1. <?php
  2. $a = array(
  3. 1=>'a',
  4. 2=>'b',
  5. 'c'=>'c',
  6. 'd'=>'d',
  7. );
  8. $b = array(
  9. 1=>'u',
  10. 3=>'v',
  11. 'c'=>'w',
  12. 'd'=>'x',
  13. 'y'=>'y',
  14. 60=>'z',
  15. );
  16. $c = $a + $b;
  17. var_dump($c);
  18. ?>
  19. //output:
  20. array(7) {
  21. [1]=>
  22. string(1) "a"
  23. [2]=>
  24. string(1) "b"
  25. ["c"]=>
  26. string(1) "c"
  27. ["d"]=>
  28. string(1) "d"
  29. [3]=>
  30. string(1) "v"
  31. ["y"]=>
  32. string(1) "y"
  33. [60]=>
  34. string(1) "z"
  35. }

2.当为关联数组时,合并相同字符键值的数组,操作符合并规则是前面的覆盖后面的,array_merge则是后面的覆盖前面的.

例,代码如下:

  1. $arr5 = array('a'=>'aaaa');
  2. $arr6 = array('a'=>'bbbb');
  3. var_dump($arr5+$arr6);
  4. var_dump(array_merge($arr5,$arr6));
  5. //输出:
  6. array (size=1)
  7. 'a' => string 'aaaa' (length=4)
  8. array (size=1)
  9. 'a' => string 'bbbb' (length=4)

array_merge() 将一个或多个PHP数组合并起来,一个数组中的值附加在前一个数组的后面,返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值,然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面.

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

3.array_merge_recursive的合并规则和array_merge相同,只是array_merge_recursive支持多维数组的合并,例,代码如下:

  1. $a = array(
  2. 1=>'a',
  3. 2=>'b',
  4. 'c'=>'c',
  5. 'd'=>'d',
  6. );
  7. $b = array(
  8. 1=>'u',
  9. 3=>'v',
  10. 'c'=>'w',
  11. 'd'=>'x',
  12. 'y'=>'y',
  13. 60=>'z',
  14. );
  15. var_dump(array_merge_recursive($a,$b));
  16. //输出:
  17. array (size=8)
  18. 0 => string 'a' (length=1)
  19. 1 => string 'b' (length=1)
  20. 'c' =>
  21. array (size=2)
  22. 0 => string 'c' (length=1)
  23. 1 => string 'w' (length=1)
  24. 'd' =>
  25. array (size=2)
  26. 0 => string 'd' (length=1)
  27. 1 => string 'x' (length=1)
  28. 2 => string 'u' (length=1)
  29. 3 => string 'v' (length=1)
  30. 'y' => string 'y' (length=1)
  31. 4 => string 'z' (length=1)