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

PHP函数JSON结果合并问题:整合多函数输出为单一JSON对象

问题描述

现有三个PHP函数,功能逻辑如下:

  • live_event():主函数,若直播流筛选结果为空则调用archived_video(),否则返回直播流数据的JSON。
  • archived_video():仅在live_event()条件不满足时执行,返回归档视频数据的JSON。
  • additional_videos():所有场景下都需执行,其返回的JSON需附加到live_event()或archived_video()的结果中,最终合并为单一JSON对象。

理想输出格式示例:

[{"status":"live_stream","data":[{"uri":"xxx","link":"xxx","title":"xxx"}]},{"additional_videos":true,"additional_video_1":"iframe code","additional_video_2":"iframe code","additional_video_3":"iframe code"}]

尝试过以下合并代码但未成功:

json_encode(array_merge(json_decode(live_event, true),json_decode(additional_videos(), true)))

当前问题:三个函数均直接通过echo json_encode()输出JSON字符串,而非返回PHP数组,无法通过json_decode()解析后用array_merge()合并。需要调整函数结构,实现结果合并输出。

各函数单独输出示例:

  • additional_videos()输出:{"additional_videos":true,"additional_video_1":"iframe code","additional_video_2":"iframe code","additional_video_3":"iframe code"}
  • archived_video()输出:{"status":"archive","data":"iframe code"}
  • live_event()输出:{"status":"live_stream","data":[{"uri":"xxx","link":"xxx","title":"xxx"}]}
解决方案

核心思路是让函数返回PHP数组而非直接输出JSON,这样就能在主逻辑中合并数组后再统一输出JSON。

1. 调整三个函数的返回逻辑

修改每个函数,去掉echo json_encode(),改为直接返回PHP数组:

调整后的live_event()

function live_event() {
    // 原有的直播流筛选逻辑
    $live_data = ...; // 获取直播流数据的逻辑
    
    if (empty($live_data)) {
        // 直播流为空时返回归档视频的数组
        return archived_video();
    } else {
        // 返回直播流数据数组
        return [
            'status' => 'live_stream',
            'data' => $live_data
        ];
    }
}

调整后的archived_video()

function archived_video() {
    // 原有的获取归档视频逻辑
    $archive_data = ...; // 获取归档视频数据
    
    return [
        'status' => 'archive',
        'data' => $archive_data
    ];
}

调整后的additional_videos()

function additional_videos() {
    // 原有的获取额外视频逻辑
    return [
        'additional_videos' => true,
        'additional_video_1' => 'iframe code',
        'additional_video_2' => 'iframe code',
        'additional_video_3' => 'iframe code'
    ];
}

2. 主逻辑中合并数组并输出JSON

现在可以在主代码中获取两个函数的数组结果,合并后统一编码为JSON输出:

// 获取主内容数组(直播或归档)
$main_content = live_event();
// 获取额外视频数组
$extra_content = additional_videos();

// 合并为数组列表(对应理想输出的格式)
$final_result = [$main_content, $extra_content];

// 输出最终JSON
echo json_encode($final_result);

备选方案(不修改原函数输出逻辑)

如果不想大规模修改原有函数的输出逻辑,可以通过捕获输出缓冲区的方式获取JSON字符串再解析:

// 捕获live_event的输出
ob_start();
live_event();
$live_json = ob_get_clean();
$live_array = json_decode($live_json, true);

// 捕获additional_videos的输出
ob_start();
additional_videos();
$extra_json = ob_get_clean();
$extra_array = json_decode($extra_json, true);

// 合并并输出
$final_result = [$live_array, $extra_array];
echo json_encode($final_result);

该方案效率略低于直接返回数组的方式,仅作为兼容旧代码的备选。


内容的提问来源于stack exchange,提问作者Dirty Bird Design

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:05:34