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 值的替换规则
+
+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。
$a = array('one','two');$b=array('three','four','five');//not a union of arrays' valuesecho '$a + $b : ';print_r ($a + $b);//output$a + $b : Array([0] => one[1] => two[2] => five)
array_merge
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
$array1 = array("color" => "red", 2, 4);$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);$result = array_merge($array1, $array2);print_r($result);// output:Array([color] => green[0] => 2[1] => 4[2] => a[3] => b[shape] => trapezoid[4] => 4)
array_merge_recursive
array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。需要注意的是,如果数组具有相同的数值键名,后一个值将不会覆盖原来的值,而是附加到后面。
$ar1 = array("color" => array("favorite" => "red"), 5);$ar2 = array(10, "color" => array("favorite" => "green", "blue"));$result = array_merge_recursive($ar1, $ar2);print_r($result);// output:Array([color] => Array([favorite] => Array([0] => red[1] => green)[0] => blue)[0] => 5[1] => 10)
另一个示例:
$arr1 = ['key1' => 'value1','key2' => 'value2','1' => 'idx0'];$arr2 = ['key1' => 'value1-1','key3' => 'value3','1' => 'idx1'];$arr = array_merge_recursive($arr1, $arr2);print_r($arr);// outputArray([key1] => Array([0] => value1[1] => value1-1)[key2] => value2[0] => idx0[key3] => value3[1] => idx1)
参考链接:
