📜  PHP中的 array_merge() 和 array_merge_recursive() 函数有什么区别?(1)

📅  最后修改于: 2023-12-03 15:18:33.530000             🧑  作者: Mango

PHP中的 array_merge() 和 array_merge_recursive() 函数有什么区别?

在PHP中,有两个函数可以用于将两个或更多数组合并为一个数组 - array_merge()array_merge_recursive()。这两个函数的用途虽然相似,但它们的执行方式却完全不同,因此我们需要知道它们的具体区别和使用场景。

array_merge()函数

array_merge() 函数将两个或更多个数组的元素合并成一个新数组。该函数的语法如下:

array array_merge(array $array1 [, array $array2 [, array $... ]])

其中,array1是必要的参数,表示要合并到的第一个数组,array2是可选参数,表示要合并到第一个数组的第二个数组,以此类推。以下是一个简单的例子:

<?php
$a = array('logo' => 'logo.png', 'title' => 'My Blog');
$b = array('homepage' => 'http://www.example.com', 'language' => 'en');
$c = array_merge($a, $b);
print_r($c);
?>

上述代码将输出以下结果:

Array
(
    [logo] => logo.png
    [title] => My Blog
    [homepage] => http://www.example.com
    [language] => en
)

我们可以看到,array_merge()函数返回了一个新的数组,其中包含了 $a$b 两个数组中的所有元素。

array_merge_recursive()函数

array_merge_recursive() 函数也将两个或更多个数组合并成一个新数组。但是,该函数的处理方式与 array_merge()函数完全不同。

array_merge_recursive() 函数会递归地将数组进行合并,如果两个合并的元素都是数组,则递归地将它们合并。当遇到具有相同键(键值)的元素时,它们的值将变成一个数组,包含所有相同键的值。

下面是一个简单的例子来说明这一点:

<?php
$a = array('name' => array('first' => 'Michael', 'last' => 'Jordan'));
$b = array('name' => array('last' => 'Jackson', 'middle' => 'Joseph'));
$c = array_merge_recursive($a, $b);
print_r($c);
?>

上述代码将输出以下结果:

Array
(
    [name] => Array
        (
            [first] => Michael
            [last] => Array
                (
                    [0] => Jordan
                    [1] => Jackson
                )

            [middle] => Joseph
        )

)

我们可以看到,array_merge_recursive()函数将 $a$b 两个数组递归地合并,对于具有相同键值的元素将其值变成一个数组,包含了所有相同键的值。

区别总结

总之,array_merge() 函数是将两个或更多个数组简单地合并成一个新数组,而 array_merge_recursive() 函数是递归地合并数组,用于将两个或更多个数组合并到一起,并将具有相同键的值变成一个数组,包含所有相同键的值。

因此,在使用这些函数时,我们需要根据实际情况选择合适的函数。如果我们只是想简单地将两个数组合并起来,则使用 array_merge()函数即可;如果我们需要递归地合并数组并处理相同键的值,则使用 array_merge_recursive()函数是更好的选择。