You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何按层级深度合并多维数组?

通用数组合并方案

问题场景

现有如下结构的数组:

[
    {
        "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"
            }
        }
    }
]

要求无需指定具体键名,实现通用合并。

解决方案

核心思路是用临时对象存储每个顶级键对应的合并后内容,遍历原数组时自动识别每个元素的顶级键,将其内部属性合并到临时对象对应结构中,最后把临时对象转换为目标数组格式。

以下是JavaScript实现代码:

function mergeArray(arr) {
    const temp = {};
    arr.forEach(item => {
        // 取出当前对象的唯一顶级键
        const key = Object.keys(item)[0];
        // 初始化临时对象中的键结构
        if (!temp[key]) temp[key] = {};
        // 合并当前键下的所有子属性
        Object.assign(temp[key], item[key]);
    });
    // 将临时对象转换为目标数组
    return Object.entries(temp).map(([key, value]) => ({ [key]: value }));
}

// 测试示例
const originalArray = [
    {"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"}}}
];

const mergedArray = mergeArray(originalArray);
console.log(JSON.stringify(mergedArray, null, 2));

补充说明

  • 该方案无需提前知晓具体键名,只要原数组中每个元素是仅包含一个顶级键的对象,就能自动合并同顶级键下的所有子属性。
  • 如果子属性存在同名情况,后出现的元素会覆盖前面的(Object.assign的默认特性),若需要深层合并而非覆盖,可以将Object.assign替换为自定义的深层合并函数。

内容的提问来源于stack exchange,提问作者Humster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:05:31