php - Yii2:如何使用 SQL 查询生成带有“分组依据”的 JSON 对象?
问题描述
我有一个 PostgreSQL 查询,其中包含这样的列地址和价格。这是 SQL 查询结果的一个简单示例:
我需要在 JSON 对象中发送这些先前的数据,并且它必须按地址分组。所以我需要这样的东西:
[
{
"address":"Elm Street 123",
"name": {
"John",
"Maria",
"George"
}
},
{
"address":"Piccadilly Street 456",
"name": {
"Robert"
}
},
]
我尝试了下一个函数来生成我想要的 JSON 对象,但它没有生成我需要的 JSON 对象:
Yii::$app->response->format = Response::FORMAT_JSON;
$persons = persons::find()
->select([
'address',
'name',
])
->asArray()
->all();
return $persons;
它生成这个 JSON 对象:
[
{
"address":"Elm Street 123",
"name": "John"
},
{
"address":"Elm Street 123",
"name": "Maria"
},
{
"address":"Piccadilly Street 456",
"name": "Robert"
},
{
"address":"Elm Street 123",
"name": "George"
},
]
我使用 Yii2 框架,所以我正在寻找 PHP 中的解决方案。也许 SQL 解决方案可以工作,但我不确定。
解决方案
SQL(和 yii2)不能原生处理这个问题。所以我重新排列数组以制作结构:
Yii::$app->response->format = Response::FORMAT_JSON;
$persons = persons::find()
->select([
'address',
'name',
])
->asArray()
->all();
$result = [];
foreach ($persons as $person) {
$address = $person['address'];
if (!isset($result[$address])) {
$result[$address] = ['address' => $address, 'name' => [],];
}
$result[$address]['name'][] = $person['name'];
}
return array_values($result);
推荐阅读
- python - CSV 到 Python 字典
- c# - 在 C# 中有什么方法可以限制 int 变量的范围吗?
- java - 找不到文件 (getResource)
- android - 我正在做一些计算,但无法将字符串解析为 int 甚至是 float
- php - 如何将表单的 $id 传递给另一个表单
- mysql - Rails:将外键添加到多列的主键
- javascript - 如何从 CSS 获取链接文本到字符串对象?
- sql - 如何在不破坏参照完整性 SQL Server 的情况下将来自不同 tbls 的地址收集到一个中
- java - 如何在 Lubuntu 中使用 PC NAME 永久挂载 Windows 共享文件夹?
- python-3.x - 针对单个问题的重复插入请求