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

如何在PHP的while循环中按ID分组并通过json_encode生成JSON数组

嘿,这个按ID(zi字段)分组生成JSON数组的问题我之前刚处理过,给你一套实用的解决方案,分步骤来:

第一步:先把MySQL数据按zi排序查询

首先要确保从数据库拉取数据时,按zi字段排序,这样同ID的记录会连续返回,后续循环分组时更高效,不会出现跳组的情况。SQL语句示例:

SELECT zi, zn, vn, pioo, pio, ve, station, es, eo FROM your_table_name ORDER BY zi;

第二步:PHP循环中实现分组逻辑

接下来在PHP里初始化一个空数组,遍历查询结果时,把同zi的记录归到同一分组下,最后用json_encode生成结构化JSON。完整代码示例(用mysqli连接,你可以换成PDO,逻辑是一样的):

// 数据库连接(根据你的实际配置修改)
$conn = mysqli_connect('localhost', 'your_username', 'your_password', 'your_db_name');
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 执行排序后的查询
$sql = "SELECT zi, zn, vn, pioo, pio, ve, station, es, eo FROM your_table_name ORDER BY zi";
$result = mysqli_query($conn, $sql);

// 初始化分组存储数组
$groupedData = [];

while ($row = mysqli_fetch_assoc($result)) {
    $currentZi = $row['zi'];
    
    // 如果当前zi还没创建分组,先建立分组的基础结构
    if (!isset($groupedData[$currentZi])) {
        $groupedData[$currentZi] = [
            'zone_id' => $currentZi,
            'zone_name' => $row['zn'],
            'items' => []
        ];
    }
    
    // 把当前行的详情数据加入对应分组的items数组
    $groupedData[$currentZi]['items'][] = [
        'vn' => $row['vn'],
        'pioo' => $row['pioo'],
        'pio' => $row['pio'],
        've' => $row['ve'],
        'station' => $row['station'],
        'es' => $row['es'],
        'eo' => $row['eo']
    ];
}

// 把关联数组转成索引数组,再生成格式化的JSON
$jsonOutput = json_encode(array_values($groupedData), JSON_PRETTY_PRINT);

// 输出或使用JSON结果
echo $jsonOutput;

// 关闭数据库连接
mysqli_close($conn);

关键细节说明

  • ORDER BY zi:这步很重要,保证同ID的记录连续出现,避免分组逻辑混乱;
  • array_values($groupedData):把原来以zi为键的关联数组转成索引数组,生成的JSON是标准数组格式,而非对象格式;
  • JSON_PRETTY_PRINT:让生成的JSON格式更易读,上线时可以去掉以压缩体积。

用你提供的测试数据,最终生成的JSON结构大概是这样的:

[
    {
        "zone_id": "1",
        "zone_name": "Zone 1",
        "items": [
            {
                "vn": "Value 01",
                "pioo": "1",
                "pio": "199",
                "ve": "0",
                "station": "1",
                "es": "1",
                "eo": "0"
            },
            {
                "vn": "Value 02",
                "pioo": "54",
                "pio": "637",
                "ve": "0",
                "station": "3",
                "es": "0",
                "eo": "0"
            }
        ]
    },
    // 其余分组以此类推
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:16