PHP如何将多MySQL查询的店铺JSON结果包裹在DATA父数组中
解决方案:将多店铺JSON结果统一包裹到DATA父数组
核心逻辑是先收集所有店铺的结果到一个全局容器中,最后再将这个容器包装到DATA字段下生成最终JSON,具体步骤如下:
1. 初始化全局容器
在循环处理店铺ID之前,创建一个空数组/列表,用来存储每个店铺的完整数据对象。
2. 修改循环内逻辑
不要在循环中直接输出单个店铺的JSON,而是将每个店铺的结构化数据(数组/字典)添加到全局容器中。
3. 生成最终嵌套JSON
循环结束后,将全局容器放入以DATA为键的对象中,再序列化为JSON字符串输出。
示例代码(PHP)
假设你当前的PHP代码类似这样:
// 当前代码(循环输出单店铺JSON) $shopIds = [1, 2, 3]; foreach ($shopIds as $id) { // 查询店铺名称 $stmt = $pdo->prepare("SELECT name FROM shops WHERE id = ?"); $stmt->execute([$id]); $shopName = $stmt->fetchColumn(); // 查询销售数据与总销售额 $stmt = $pdo->prepare("SELECT article, SUM(amount) AS quantity FROM sales WHERE shop_id = ? GROUP BY article"); $stmt->execute([$id]); $soldArticles = $stmt->fetchAll(PDO::FETCH_ASSOC); $total = array_sum(array_column($soldArticles, 'quantity')); // 直接输出单店铺JSON echo json_encode([ 'Prodavnica' => $shopName, 'soldArticles' => $soldArticles, 'Total' => $total ]); }
修改后的代码:
// 修改后代码(统一生成嵌套JSON) $shopIds = [1, 2, 3]; $allShopsData = []; // 全局容器数组 foreach ($shopIds as $id) { // 查询店铺名称 $stmt = $pdo->prepare("SELECT name FROM shops WHERE id = ?"); $stmt->execute([$id]); $shopName = $stmt->fetchColumn(); // 查询销售数据与总销售额 $stmt = $pdo->prepare("SELECT article, SUM(amount) AS quantity FROM sales WHERE shop_id = ? GROUP BY article"); $stmt->execute([$id]); $soldArticles = $stmt->fetchAll(PDO::FETCH_ASSOC); $total = array_sum(array_column($soldArticles, 'quantity')); // 将单店铺数据添加到全局容器 $allShopsData[] = [ 'Prodavnica' => $shopName, 'soldArticles' => $soldArticles, 'Total' => $total ]; } // 生成最终的嵌套JSON并输出 $finalResult = ['DATA' => $allShopsData]; echo json_encode($finalResult, JSON_PRETTY_PRINT);
输出对比
现有输出(多个独立JSON)
{"Prodavnica":"Shop A","soldArticles":[{"article":"Item1","quantity":5}],"Total":5} {"Prodavnica":"Shop B","soldArticles":[{"article":"Item2","quantity":3}],"Total":3}
期望输出(嵌套JSON结构)
{ "DATA": [ { "Prodavnica": "Shop A", "soldArticles": [{"article":"Item1","quantity":5}], "Total": 5 }, { "Prodavnica": "Shop B", "soldArticles": [{"article":"Item2","quantity":3}], "Total": 3 } ] }
其他语言适配思路
如果使用Python/Java等语言,逻辑完全一致:
- 初始化一个空列表/集合存储单店铺数据
- 循环内将每个店铺的字典/对象加入列表
- 最后创建包含
DATA键的对象,将列表赋值给该键后序列化
内容的提问来源于stack exchange,提问作者BigBoiVladica
相关产品推荐
相关产品推荐

