PHP 数组合并的三种方式区别

PHP 数组合并的三种方式区别

author: he xiaodong date: 2020-07-29

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

+

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

$a = array('one','two');
$b=array('three','four','five');

//not a union of arrays' values
echo '$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);

// output
Array
(
    [key1] => Array
        (
            [0] => value1
            [1] => value1-1
        )

    [key2] => value2
    [0] => idx0
    [key3] => value3
    [1] => idx1
)

参考链接:

  1. array 运算符 & array_merge & array_merge_recursive