PHP中如何合并多个数组或接口返回的JSON?WordPress插件开发场景
首先明确:不建议直接合并原始JSON字符串,容易出现语法错误,最优方案是解码后存入统一容器,根据业务需求有两种常用实现方式:
方案1:保留每个接口返回的部门独立结构
适合需要后续按部门维度筛选、统计的场景,直接将每个解码后的部门数据追加到总数组即可:
// 初始化总容器,存储所有接口返回的部门数据 $all_departments = []; foreach ($urls as $url) { // 请求错误判断,避免异常中断 $request = wp_remote_get($url); if (is_wp_error($request)) { // 可自行记录错误日志,跳过失败请求 error_log('接口请求失败:' . $url . ' 错误信息:' . $request->get_error_message()); continue; } $response = wp_remote_retrieve_body($request); // 传true将JSON转为关联数组,PHP操作更灵活,不需要可去掉参数转为对象 $dept_data = json_decode($response, true); // JSON解析错误判断 if (json_last_error() !== JSON_ERROR_NONE) { error_log('JSON解析失败:' . $url . ' 响应内容:' . $response); continue; } // 直接追加到总数组 $all_departments[] = $dept_data; } // 后续直接操作$all_departments即可,示例:遍历所有部门的员工 foreach ($all_departments as $dept) { echo "部门:{$dept['name']} 楼层:{$dept['floor']}\n"; foreach ($dept['staff'] as $staff) { echo " 员工:{$staff['name']} 技能:" . implode(',', $staff['info']) . "\n"; } }
方案2:聚合指定字段(比如合并所有员工数据)
如果不需要保留部门维度,只需要聚合所有同结构的字段(比如把所有部门的员工合并为一个总列表),可以用下面的实现:
// 初始化总员工数组 $all_staff = []; foreach ($urls as $url) { // 请求、解析逻辑和方案1一致 $request = wp_remote_get($url); if (is_wp_error($request)) continue; $dept_data = json_decode(wp_remote_retrieve_body($request), true); if (json_last_error() !== JSON_ERROR_NONE) continue; // 方式1:用array_merge合并,适合小数据量场景 // $all_staff = array_merge($all_staff, $dept_data['staff']); // 方式2:循环追加,大数据量场景性能更高,避免array_merge的多次参数解析开销 foreach ($dept_data['staff'] as $staff) { $all_staff[] = $staff; } }
高性能优化建议(URL数量多的场景)
如果URL数量超过10个,串行请求耗时会很长,可以用WordPress内置的Requests库实现并发批量请求,大幅提升拉取效率:
// 批量构造请求参数 $request_list = []; foreach ($urls as $url) { $request_list[] = [ 'url' => $url, 'method' => 'GET', 'timeout' => 10, ]; } // 并发发起所有请求 $responses = Requests::request_multiple($request_list); $all_departments = []; foreach ($responses as $resp) { if (!$resp->success) continue; $dept_data = json_decode($resp->body, true); if (json_last_error() === JSON_ERROR_NONE) { $all_departments[] = $dept_data; } }
内容的提问来源于stack exchange,提问作者Duke
相关产品推荐
相关产品推荐

