全部 后端程序前端模板插件二开综合求助谈天说地心得分享

关于array_merge_recursive的用法

发布:2022-11-21 11:26分类:后端程序评论:0浏览:86

今天在STACK OVERFLOW看到个问题,需要将一数组结构改为另一结构,需求如下:

原数组:

[
    {
        "function_1": {
            "element": {
                "error": "0",
                "msg": "test"
            }
        }
    },
    {
        "function_1": {
            "element_2": {
                "error": "0",
                "msg": "test"
            }
        }
    },
    {
        "function_2": {
            "element": {
                "error": "0",
                "msg": "test"
            }
        }
    },
    {
        "function_2": {
            "element_2": {
                "error": "0",
                "msg": "test"
            }
        }
    }
]

改为:

[
    {
        "function_1": {
            "element": {
                "error": "0",
                "msg": "test"
            },
            "element_2": {
                "error": "0",
                "msg": "test"
            }
        }
    },
    {
        "function_2": {
            "element": {
                "error": "0",
                "msg": "test"
            },
            "element_2": {
                "error": "0",
                "msg": "test"
            }
        }
    }
]

我给的答案是

function changeArr($data){
    $box = $new = [];
    foreach ($data as $v){
        $key = array_key_first($v);
        $i = count($box);
        if(in_array($key, $box)){
            $keys = array_flip($box);
            $i = $keys[$key];
        }else{
            $box[] = $key;
        }
        $new[$i][$key] = isset($new[$i][$key]) ? array_merge($new[$i][$key], $v[$key]) : $v[$key];
    }
    return $new;
}

结果后面有牛人提供了个更简洁的方法:array_merge_recursive来进行处理,如下

$merged = array_merge_recursive(...$array); //这里用到 array_merge_recursive 对二维度相同的键进行了组合,快捷

$result = [];
foreach ($merged as $key => $data) {
    $result[] = [$key => $data];
}
print_r($result);



    暂无回复!
点击回复
发布帖子

作者信息

fulang
等级:Lv1
积分:1676
这家伙很懒,什么都没写呢~