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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:54:22