php合并多维数组,递归合并

来源:赵克立博客 分类: PHP 标签:PHP数组发布时间:2020-01-11 14:43:35最后更新:2020-01-11 22:23:11浏览:1636
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2020-01-11 22:23:11
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

php有array_merge合并数组功能,但是有个问题,这个函数只合并一维数组,如果有多维数组,则后面的会覆盖前面数组中的子节点,因此写啦另一个深度合并的函数来合并子节点的元素

/**
 * 深度合并数组
 * @DateTime 2020-01-11
 * @Author   mokuyu
 *
 * @param  [type]   $arrs [description]
 * @return [type]
 */
function array_merge_deep(...$arrs)
{
    $merged = [];
    while ($arrs) {
        $array = array_shift($arrs);
        if (!$array) {continue;}
        foreach ($array as $key => $value) {
            if (is_string($key)) {
                if (is_array($value) && array_key_exists($key, $merged)
                    && is_array($merged[$key])) {
                    $merged[$key] = array_merge_deep(...[$merged[$key], $value]);
                } else {
                    $merged[$key] = $value;
                }
            } else {
                $merged[] = $value;
            }
        }
    }

    return $merged;
}

$arr1 = [
    'oss' => [
        'access_key_id' => 'asdfasdfsdf',
        'app_secket'    => '',
    ],
];
$arr2 = [
    'oss' => [
        'on'     => true,
        'domain' => 'www.res.com',
    ],
];

var_dump(array_merge($arr1, $arr2));
var_dump(array_merge_deep($arr1, $arr2));

输出结果如下

2001111578725083425054.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python