
本文介绍如何将两个结构相似的 php 关联数组进行智能合并,仅合并其 data 子数组,同时保持顶层键(如 success、message、http_response 等)一致且不重复,适用于 api 响应聚合等实际场景。
本文介绍如何将两个结构相似的 php 关联数组进行智能合并,仅合并其 data 子数组,同时保持顶层键(如 success、message、http_response 等)一致且不重复,适用于 api 响应聚合等实际场景。
在 PHP 开发中,常需将多个来源的响应数据(如用户信息、权限、配置等)整合为统一格式返回给前端。当两个数组结构高度一致(如均为 API 标准响应格式),但仅需合并其 data 字段时,直接使用 array_merge() 全局合并会导致顶层键被覆盖或逻辑错乱——此时应精准合并子数组。
核心思路是:复用任一数组作为基础结构,仅将其 data 键与另一数组的 data 键进行递归或非递归合并(本例中键名无冲突,使用 array_merge() 即可)。示例如下:
// 假设 $array1 和 $array2 是题目中给出的两个响应数组
$array1 = [
'success' => 1,
'message' => 'success',
'status_code' => 0,
'data' => ['email' => '<a class="__cf_email__" data-cfemail="91fff0f4f4fcfcf0fdf8faa1a2a7d1f6fcf0f8fdbff2fefc" href="/cdn-cgi/l/email-protection">[email protected]</a>'],
'http_response' => 200
];
$array2 = [
'success' => 1,
'message' => 'success',
'status_code' => 0,
'data' => ['name' => 'ram'],
'http_response' => 200
];
// ✅ 正确做法:仅合并 data 子数组,保留 $array1 的整体结构
$result = $array1;
$result['data'] = array_merge($array1['data'], $array2['data']);
print_r($result);
输出结果将严格符合预期:
Array
(
[success] => 1
[message] => success
[status_code] => 0
[data] => Array
(
[email] => <a class="__cf_email__" data-cfemail="91fff0f4f4fcfcf0fdf8faa1a2a7d1f6fcf0f8fdbff2fefc" href="/cdn-cgi/l/email-protection">[email protected]</a>
[name] => ram
)
[http_response] => 200
)
⚠️ 注意事项:
- 若 $array1['data'] 和 $array2['data'] 中存在同名键(如都含 'email'),array_merge() 会以后一个数组的值覆盖前一个;如需深度合并(保留双方同名键),应改用 array_merge_recursive() 或自定义递归函数。
- 确保两数组的 data 均为索引数组或关联数组;若其中一个是 null 或非数组,需提前校验并初始化:
$result['data'] = array_merge( (array)($array1['data'] ?? []), (array)($array2['data'] ?? []) ); - 实际项目中建议封装为可复用函数,提升健壮性与可读性:
function mergeApiResponseData(array $base, array $extra): array { $merged = $base; $merged['data'] = array_merge( (array)($base['data'] ?? []), (array)($extra['data'] ?? []) ); return $merged; }
通过这种方式,既能精准控制合并粒度,又能保证响应结构的稳定性与可维护性,是构建灵活、可扩展后端接口的常用实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











