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

如何用PHP实现父子结构的嵌套JSON数据分组?

如何用PHP生成指定格式的嵌套JSON数据

我看出来你的问题了——目前你的代码把所有课程的offer数据都放到了一个独立的外层数组里,没有和对应的课程条目嵌套在一起。要生成你想要的嵌套JSON结构,我们只需要调整offer数据的存储位置,把它们放到对应课程的内部数组里就行。

先再明确下你要的目标结构(方便对照):

{
  "couresList_PVP": [
    {
      "pvp_ad_chptr_id": "9",
      "pvp_ad_chptr_un_id": "1526249608",
      "pvp_ad_chptr_name": "54654",
      "offer_chapter_PVP": [
        {
          "pvp_ad_chptr_offr_id": "4",
          "pvp_ad_chptr_un_id": "1526249608",
          "pvp_ad_chptr_offr_un_id": "Offer-1526249608"
        },
        {
          "pvp_ad_chptr_offr_id": "3",
          "pvp_ad_chptr_un_id": "1526249608",
          "pvp_ad_chptr_offr_un_id": "Offer-1526249608"
        }
      ]
    }
  ]
}

代码修改思路

核心就是:在遍历每一条课程数据时,把该课程对应的offer列表直接挂载到当前课程的数组中,而不是放到外层的独立数组。

修正后的PHP代码

$sql = mysqli_query($this->db,"SELECT * from `pvp_admin_chptr_list` order by pvp_ad_chptr_id desc");
if(mysqli_num_rows($sql) > 0){
    // 初始化课程列表数组
    $data['couresList_PVP'] = [];
    
    while($res=mysqli_fetch_assoc($sql)){
        $url=$this->site_url.'images_console/chapter_banner_console/'.$res['pvp_ad_chptr_banner'];
        $video=$this->site_url.'video_console/'.$res['pvp_ad_chptr_video_name'];
        $images=array('pvp_ad_chptr_banner'=>$url,'pvp_ad_chptr_video_name'=>$video);
        
        // 合并当前课程的基础数据和图片视频链接
        $courseItem = array_merge($res,$images);
        
        // 初始化当前课程的offer数组
        $courseItem['offer_chapter_PVP'] = [];
        
        // 查询当前课程对应的offer(这里建议用预编译语句防止SQL注入)
        $ofr_sql = mysqli_query($this->db,"SELECT * from `pvp_admin_chptr_offers` where pvp_ad_chptr_un_id='".$res['pvp_ad_chptr_un_id']."' order by pvp_ad_chptr_offr_id desc");
        if(mysqli_num_rows($ofr_sql) > 0){
            while($ofr_res=mysqli_fetch_assoc($ofr_sql)){
                // 把offer添加到当前课程的offer数组里
                $courseItem['offer_chapter_PVP'][] = $ofr_res;
            }
        }else{
            // 没有offer时的提示
            $courseItem['offer_chapter_PVP'][] = array("status"=>"No Data Found");
        }
        
        // 把处理好的课程项添加到课程列表
        $data['couresList_PVP'][] = $courseItem;
    }
    
    // 返回JSON响应
    $this->response($this->json($data), 200);
}

关键修改点说明

  • 移除了原代码中外层的$data['offer_chapter_PVP']数组,转而在每个课程项$courseItem里创建专属的offer_chapter_PVP字段
  • 查询到的offer数据直接push到当前课程项的offer_chapter_PVP数组中,确保了课程与offer的嵌套关联
  • 提前初始化了$data['couresList_PVP']数组,代码逻辑更严谨
  • 给SQL查询中的变量添加了引号包裹,避免语法错误(额外建议:生产环境最好用预编译语句防范SQL注入)

这样修改后,生成的JSON就会完全符合你想要的嵌套结构了。


内容的提问来源于stack exchange,提问作者Piyush Tripathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:25