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));
输出结果如下