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
相关产品推荐
相关产品推荐

