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

如何在REST API中按birth_place分组生成嵌套JSON数组?

实现按出生地分组并生成嵌套用户数组的方案

有两种可行方案可以实现你要的嵌套JSON结构,根据你的MySQL版本和需求选择:

方案一:PHP端手动分组(兼容所有MySQL版本)

先查询所有用户的完整数据,再通过PHP循环将用户按出生地分组,同时统计每组的用户数量:

$db = db_connect();
// 查询所有用户数据,按出生地排序方便分组
$users = $db->query('SELECT id, name, birth_date, gender, birth_place FROM users ORDER BY birth_place')->getResultArray();

$groupedData = [];
foreach ($users as $user) {
    $birthPlace = $user['birth_place'];
    // 移除出生地字段,避免重复
    unset($user['birth_place']);
    
    if (!isset($groupedData[$birthPlace])) {
        $groupedData[$birthPlace] = [
            'birth_place' => $birthPlace,
            'jumlah_data_user' => 0,
            'users' => []
        ];
    }
    
    $groupedData[$birthPlace]['jumlah_data_user']++;
    $groupedData[$birthPlace]['users'][] = $user;
}

// 将关联数组转为索引数组,符合返回格式
$data = [
    'status' => true,
    'error' => null,
    'data' => array_values($groupedData)
];

return $this->respond($data, 200);

方案二:利用MySQL JSON函数(MySQL 5.7+ 支持)

如果你的MySQL版本在5.7及以上,可以直接用JSON_ARRAYAGG和JSON_OBJECT函数在SQL中生成嵌套的用户数组,减少PHP端的处理逻辑:

$db = db_connect();
$sql = "
    SELECT 
        birth_place,
        COUNT(id) as jumlah_data_user,
        JSON_ARRAYAGG(
            JSON_OBJECT(
                'id', id,
                'name', name,
                'birth_date', birth_date,
                'gender', gender
            )
        ) as users
    FROM users 
    GROUP BY birth_place
";

$data = [
    'status' => true,
    'error' => null,
    'data' => $db->query($sql)->getResultArray()
];

return $this->respond($data, 200);

注意事项

  • 方案一兼容性强,不管MySQL版本都能运行,分组逻辑灵活,方便后续扩展;
  • 方案二由数据库直接完成数据聚合,减少PHP端循环处理,数据量大时性能更优;
  • 两种方案返回的结果都完全匹配你期望的嵌套JSON结构,jumlah_data_user会自动以数字类型返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:01:29