前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP中,使用递归深度合并多个数组

PHP中,使用递归深度合并多个数组

原创
作者头像
lascyb
修改2021-11-01 11:59:57
2.1K0
修改2021-11-01 11:59:57
举报
文章被收录于专栏:PHP-轮子制造机PHP-轮子制造机

函数源码:

代码语言:php
复制
//导入待合并数组,引用$array数组接收
function merge(array &$array,array ...$mergeArray): array
{
    foreach ($mergeArray as $item){
        mergeOne($array,$item); //对每个待合并数组执行合并函数
    }
    return $array;
}

//如果仅有两个数组需要合并,也可以直接使用此函数
function mergeOne(&$array,$pushArray)
{
    foreach ($pushArray as $key=>$item){ //通过键值循环
        if (is_array($item)){ //如果待合并元素同样为数组,进行深度合并
            if(isset($array[$key])&&is_array($array[$key])){ //如果原数组同键名对应元素同样为数组
                mergeOne($array[$key],$item); //递归深度合并
            }else{//如果原数组同键名对应元素不是数组,直接覆盖
                $array[$key]=$item;
            }
        }else{ //如果待合并元素非数组,直接通过键名赋值
            $array[$key]=$item;
        }
    }
}

使用示例:

代码语言:php
复制
$a=[
    "a"=>10,
    "b"=>[
        "b.a"=>10
    ],
    "c"=>[
        "c.a"=>50,
        "c.b"=>60,
    ]
];
$b=[
    "a"=>20,
    "b"=>30,
    "c"=>[
        "c.a"=>40
    ]
];
$c=[
    "a"=>30,
    "b"=>[
        "b.a"=>40
    ],
    "c"=>[
        "c.a"=>50,
        "c.c"=>100
    ]
];
//合并多个数组
merge($a,$b,$c);
var_dump($a);
//合并两个数组
mergeOne($a,$b);
var_dump($a);

示例结果:

代码语言:php
复制
//合并$a $b $c
[
  "a" => 30
  "b" => [
    "b.a" => 40
  ]
  "c" => [
    "c.a" => 50
    "c.b" => 60
    "c.c" => 100
  ]
]
//合并$a $b
[
  "a" => 20
  "b" => 30
  "c" =>  [
    "c.a" => 40
    "c.b" => 60
    "c.c" => 100
  ]
]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数源码:
  • 使用示例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档