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

