如何用PHP脚本从MySQL数据库获取数据生成嵌套JSON数组?
生成嵌套JSON数组的PHP解决方案
我看了你现在的代码,要实现你想要的嵌套JSON结构,核心思路是按title字段对数据进行分组,把同一分类下的name和image整理成子数组,再组合成最终的嵌套结构。
假设你的数据库表结构
首先我假设你的upcomingevent_banner表包含以下字段(如果实际字段名不同,你可以对应修改代码里的键名):
title:对应Dance、Music这类分类标题name:对应每个section里的名称image:对应每个section里的图片链接
修改后的PHP代码
<?php require "conn.php"; // 建议用字段名明确查询,避免*带来的不确定性 $sql = "SELECT title, name, image FROM upcomingevent_banner"; $result = mysqli_query($conn, $sql); // 先创建一个临时数组,用来按title分组存储数据 $groupedData = []; while ($row = mysqli_fetch_assoc($result)) { $title = $row['title']; // 如果这个title还没在分组数组里,先初始化一个空的section数组 if (!isset($groupedData[$title])) { $groupedData[$title] = []; } // 把当前行的name和image添加到对应title的section里 $groupedData[$title][] = [ "name" => $row['name'], "image" => $row['image'] ]; } // 把分组后的数组转换成你需要的最终结构 $finalResponse = ["data" => []]; foreach ($groupedData as $title => $section) { $finalResponse["data"][] = [ "title" => $title, "section" => $section ]; } // 输出JSON,确保中文等特殊字符正常显示可以加JSON_UNESCAPED_UNICODE echo json_encode($finalResponse, JSON_UNESCAPED_UNICODE); $conn->close(); ?>
代码说明
- 分组存储:先用
$groupedData数组按title把同分类的条目聚合起来,这样能方便后续生成嵌套的section数组。 - 构建最终结构:遍历分组后的数组,把每个
title和对应的section数组组合成对象,放到data数组里。 - 优化查询:用明确的字段名替代
SELECT *,让代码更清晰且避免不必要的字段干扰。 - 字符编码:添加
JSON_UNESCAPED_UNICODE参数可以防止中文被转义成Unicode编码,让JSON更易读。
测试输出
运行这段代码后,就能得到你期望的嵌套JSON结构啦:
{ "data": [ { "title": "Dance", "section": [ { "name": "kids dancing in school", "image": "http://images1.com" }, { "name": "Bharatanattyam", "image": "http://image2.com" } ] }, { "title": "Music", "section": [ { "name": "keyboard player", "image": "image3.com" }, { "name": "you gotta do that", "image": "https://image4.com" } ] } ] }
内容的提问来源于stack exchange,提问作者sandeep naik
相关产品推荐
相关产品推荐

