PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php array_merge_recursive 数组合并

管理员 2025-03-08
工作总结
47

在 PHP 中,array_merge_recursive() 函数用于递归地合并两个或多个数组。与 array_merge() 不同,array_merge_recursive() 会递归地处理数组中的数组元素,而不是简单地覆盖。


1. 基本用法

array_merge_recursive() 的基本语法如下:

php
复制
array_merge_recursive(array $array1, array $array2, ...): array

示例代码

php
复制
<?php$array1 = [
    'name' => 'John',
    'hobbies' => ['reading', 'coding'],];$array2 = [
    'name' => 'Jane',
    'hobbies' => ['swimming'],];$result = array_merge_recursive($array1, $array2);print_r($result);?>

输出

plaintext
复制
Array
(
    [name] => Array
        (
            [0] => John
            [1] => Jane
        )

    [hobbies] => Array
        (
            [0] => reading
            [1] => coding
            [2] => swimming
        )
)

2. 递归合并规则

array_merge_recursive() 的合并规则如下:

  1. 如果两个数组的键相同且值都是数组,则递归合并这两个数组。

  2. 如果两个数组的键相同但值不是数组,则将值合并为一个数组。

示例代码

php
复制
<?php$array1 = [
    'user' => [
        'name' => 'John',
        'age' => 30,
    ],];$array2 = [
    'user' => [
        'name' => 'Jane',
        'hobbies' => ['reading', 'coding'],
    ],];$result = array_merge_recursive($array1, $array2);print_r($result);?>

输出

plaintext
复制
Array
(
    [user] => Array
        (
            [name] => Array
                (
                    [0] => John
                    [1] => Jane
                )

            [age] => 30
            [hobbies] => Array
                (
                    [0] => reading
                    [1] => coding
                )
        )
)

3. 处理非数组值

如果两个数组的键相同但值不是数组,array_merge_recursive() 会将值合并为一个数组。

示例代码

php
复制
<?php$array1 = [
    'name' => 'John',];$array2 = [
    'name' => 'Jane',];$result = array_merge_recursive($array1, $array2);print_r($result);?>

输出

plaintext
复制
Array
(
    [name] => Array
        (
            [0] => John
            [1] => Jane
        )
)

4. 多维数组合并

array_merge_recursive() 可以处理多维数组的递归合并。

示例代码

php
复制
<?php$array1 = [
    'users' => [
        'John' => [
            'age' => 30,
            'hobbies' => ['reading', 'coding'],
        ],
    ],];$array2 = [
    'users' => [
        'Jane' => [
            'age' => 25,
            'hobbies' => ['swimming'],
        ],
    ],];$result = array_merge_recursive($array1, $array2);print_r($result);?>

输出

plaintext
复制
Array
(
    [users] => Array
        (
            [John] => Array
                (
                    [age] => 30
                    [hobbies] => Array
                        (
                            [0] => reading
                            [1] => coding
                        )
                )

            [Jane] => Array
                (
                    [age] => 25
                    [hobbies] => Array
                        (
                            [0] => swimming
                        )
                )
        )
)

5. 注意事项

  1. 键冲突

    • 如果两个数组的键相同且值都是数组,则递归合并。

    • 如果两个数组的键相同但值不是数组,则将值合并为一个数组。

  2. 性能

    • 对于非常大的数组,递归合并可能会导致性能问题。

  3. 覆盖行为

    • 如果需要覆盖相同键的值,而不是合并,可以使用 array_replace_recursive()


6. 与 array_merge() 的区别

  • array_merge()

    • 如果两个数组的键相同,后面的数组值会覆盖前面的数组值。

    • 不会递归处理数组中的数组元素。

  • array_merge_recursive()

    • 如果两个数组的键相同且值都是数组,则递归合并。

    • 如果两个数组的键相同但值不是数组,则将值合并为一个数组。

示例代码

php
复制
<?php$array1 = [
    'name' => 'John',
    'hobbies' => ['reading', 'coding'],];$array2 = [
    'name' => 'Jane',
    'hobbies' => ['swimming'],];$resultMerge = array_merge($array1, $array2);$resultMergeRecursive = array_merge_recursive($array1, $array2);echo "array_merge():\n";print_r($resultMerge);echo "array_merge_recursive():\n";print_r($resultMergeRecursive);?>

输出

plaintext
复制
array_merge():
Array
(
    [name] => Jane
    [hobbies] => Array
        (
            [0] => swimming
        )
)

array_merge_recursive():
Array
(
    [name] => Array
        (
            [0] => John
            [1] => Jane
        )

    [hobbies] => Array
        (
            [0] => reading
            [1] => coding
            [2] => swimming
        )
)

7. 总结

函数行为
array_merge()覆盖相同键的值,不递归处理数组元素
array_merge_recursive()递归合并相同键的值,合并非数组值为数组

根据具体需求选择合适的函数:

  • 如果需要覆盖相同键的值,使用 array_merge()

  • 如果需要递归合并相同键的值,使用 array_merge_recursive()



本文关键词: php array merge recursive 数组 合并

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部