本文介绍如何将两个结构相似的 PHP 关联数组(如 API 响应)进行智能合并,重点将第二个数组的 data 内容追加到第一个数组的 data 中,实现键名级合并而非数字索引覆盖。
本文介绍如何将两个结构相似的
php
关联数组(如 api 响应)进行智能合并,重点将第二个数组的 `data` 内容追加到第一个数组的 `data` 中,实现键名级合并而非数字索引覆盖。
在实际开发中(尤其是构建聚合 API 或组合多服务响应时),常需将多个结构一致的数组(如含 success、message、data 等字段的 JSON 响应)合并为一个统一输出。关键需求是:
保留公共顶层字段(取任一数组值即可),并将各自 data 子数组按键名合并(非索引覆盖),最终得到单一、无重复键、无冗余索引的完整响应数组。
正确做法不是使用 array_merge() 直接合并整个数组(会导致顶层字段被后数组覆盖,且 data 作为子数组会被整体替换),而是
仅对 data 键执行键名安全的合并
:
⚠️ 注意事项:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
array_merge() 对关联数组会按键名合并,相同键名后者覆盖前者;若需“不覆盖”式合并(如保留 $array1['data']['email'] 且新增 $array2['data']['name']),此方式完全适用;
若 $array1['data'] 或 $array2['data'] 可能为 null 或非数组,建议预先校验:
如需递归合并嵌套结构(如 data.user.profile),应改用 array_merge_recursive(),但注意它会对同名数值键做追加而非覆盖;
合并后其他顶层字段(如 success, http_response)建议显式统一(例如取 $array1 的值,或根据业务逻辑校验一致性)。
最终输出即为符合预期的扁平化 data 结构——无索引污染、无键冲突、语义清晰,可直接 json_encode() 返回前端或用于后续处理。
立即学习
“
PHP免费学习笔记(深入)
”;
// 假设 $array1 和 $array2 是两个源数组
// ✅ 正确:深度合并 data 子数组,保留 email、name 等键名
$array1['data'] = array_merge($array1['data'], $array2['data']);
// 输出合并后的完整数组(以 $array1 为基准)
print_r($array1);$array1['data'] = array_merge(
(array)($array1['data'] ?? []),
(array)($array2['data'] ?? [])
);