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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:03