layout: posttitle: PHP 数组合并的三种方式区别
subtitle: PHP 数组合并的三种方式区别
date: 2020-07-29
author: he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- Go
- PHP
- MySQL
- array
- array_merge
- +
- array_merge_recursive

最直观区别是对于:是否重建索引,前后两个数组有相同 key 值的替换规则

+

+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

  1. $a = array('one','two');
  2. $b=array('three','four','five');
  3. //not a union of arrays' values
  4. echo '$a + $b : ';
  5. print_r ($a + $b);
  6. //output
  7. $a + $b : Array
  8. (
  9. [0] => one
  10. [1] => two
  11. [2] => five
  12. )

array_merge

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

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

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

  1. $array1 = array("color" => "red", 2, 4);
  2. $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
  3. $result = array_merge($array1, $array2);
  4. print_r($result);
  5. // output:
  6. Array
  7. (
  8. [color] => green
  9. [0] => 2
  10. [1] => 4
  11. [2] => a
  12. [3] => b
  13. [shape] => trapezoid
  14. [4] => 4
  15. )

array_merge_recursive

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

如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。需要注意的是,如果数组具有相同的数值键名,后一个值将不会覆盖原来的值,而是附加到后面。

  1. $ar1 = array("color" => array("favorite" => "red"), 5);
  2. $ar2 = array(10, "color" => array("favorite" => "green", "blue"));
  3. $result = array_merge_recursive($ar1, $ar2);
  4. print_r($result);
  5. // output:
  6. Array
  7. (
  8. [color] => Array
  9. (
  10. [favorite] => Array
  11. (
  12. [0] => red
  13. [1] => green
  14. )
  15. [0] => blue
  16. )
  17. [0] => 5
  18. [1] => 10
  19. )

另一个示例:

  1. $arr1 = [
  2. 'key1' => 'value1',
  3. 'key2' => 'value2',
  4. '1' => 'idx0'
  5. ];
  6. $arr2 = [
  7. 'key1' => 'value1-1',
  8. 'key3' => 'value3',
  9. '1' => 'idx1'
  10. ];
  11. $arr = array_merge_recursive($arr1, $arr2);
  12. print_r($arr);
  13. // output
  14. Array
  15. (
  16. [key1] => Array
  17. (
  18. [0] => value1
  19. [1] => value1-1
  20. )
  21. [key2] => value2
  22. [0] => idx0
  23. [key3] => value3
  24. [1] => idx1
  25. )

参考链接:

  1. array 运算符 & array_merge & array_merge_recursive

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券