我有以下MySQL表:
+----+----------+--------+------+
| id | brand | model | year |
+----+----------+--------+------+
| 1 | audi | tt | 2014 |
+----+----------+--------+------+
| 2 | audi | a4 | 2015 |
+----+----------+--------+------+
| 3 | mercedes | aclass | 2014 |
+----+----------+--------+------+
| 4 | mercedes | cclass | 2017 |
+----+----------+--------+------+
我在PHP中使用MYSQL并编写查询来获取此数据:
$carsQuery = SELECT * FROM cars_table ORDER BY model ASC;
执行查询后,我使用PHP尝试实现以下JSON对象输出:
{
"car_models": [
{
"id": "audi",
"name": "Audi",
"cars": [
{
"id": "1",
"model": "tt",
"year": "2014",
"brand": "audi"
},
{
"id": "2",
"model": "a4",
"year": "2015",
"brand": "audi"
}
]
},
{
"id": "mercedes",
"name": "Mercedes",
"cars": [
{
"id": "3",
"model": "aclass",
"year": "2014",
"brand": "mercedes"
},
{
"id": "4",
"model": "cclass",
"year": "2017",
"brand": "mercedes"
}
]
}
]
}
以下代码片段是我用来实现此目的的PHP代码:
foreach($carsQuery as $carQuery){
$cars[$carQuery->brand][] = $carQuery;
}
return array(
'car_models' => $carQuery
);
结果被分组但是我无法达到添加其他字段以实现我想要的JSON对象的程度。
答案 0 :(得分:2)
添加其他字段主要是在您正在构建的数组中定义它们。
foreach ($carsQuery as $carQuery) {
$cars[$carQuery->brand]['id'] = $carQuery->brand;
$cars[$carQuery->brand]['name'] = ucfirst($carQuery->brand);
$cars[$carQuery->brand]['cars'][] = $carQuery;
}
对于同一品牌的多个记录,'id'和'name'将被覆盖相同的值。
您可能需要使用除ucfirst
之外的其他方法来格式化'name'字段,因为某些值可能具有不同的大小写。
您还应该使用array_values
创建最终数组,以便用数字键替换字符串键。
return array(
'car_models' => array_values($cars)
);
这将确保car_models是最终JSON中的对象数组,而不是对象。