【发布时间】:2016-07-09 15:14:36
【问题描述】:
我有两个表和一个链接(中间)表:
manufacturer car
+----+-----------+---------+ +----+----------+-------+
| id | make | founded | | id | model | debut |
+----+-----------+---------+ +----+----------+-------+
| 1 | Ford | 1903 | | 1 | Model T | 1908 |
| 2 | Chevrolet | 1911 | | 2 | Series C | 1913 |
| 3 | Honda | 1946 | | 3 | Mustang | 1962 |
| | | | | 4 | Camaro | 1966 |
| | | | | 5 | Model G | 1924 |
+----+-----------+---------+ +----+----------+-------+
manufacturer_car
+----+-----------------+--------+
| id | manufacturer_id | car_id |
+----+-----------------+--------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 4 |
+----+-----------------+--------+
注意:本田没有汽车。 Model G (Toyota) 不对应任何制造商。
我想在 PHP 中为这些链接表创建一个多维数组。汽车匹配将是制造商数组中的一个数组。我不确定如何在 PHP 中表示该类型的数组,以下是 JSON 表示:
[
{
"manufacturer": "Ford",
"founded": "1903",
"cars":[
{
"model": "Model T",
"debut": "1908"
},
{
"model": "Mustang",
"debut": "1962"
}
]
},
{
"manufacturer": "Chevrolet",
"founded": "1911",
"cars":[
{
"model": "Series C",
"debut": "1913"
},
{
"model": "Camaro",
"debut": "1966"
}
]
},
{
"manufacturer": "Honda",
"founded": "1946",
"cars":[
]
}
]
我试过了:
$query = "SELECT
manufacturer.make,
manufacturer.founded,
car.model,
car.debut
FROM
manufacturer
LEFT JOIN manufacturer_car
INNER JOIN car
ON manufacturer_car.car_id = car.id
ON manufacturer_car.manufacturer_id = manufacturer.id";
$rows = array();
if ($result = $connection->query($query)) {
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
}
// Print array
print_r($rows);
但这会导致:
[0] => Array | [1] => Array
( | (
[manufacturer] => Ford | [manufacturer] => Ford
[founded] => 1903 | [founded] => 1903
[model] => Model T | [model] => Mustang
[debut] => 1908 | [debut] => 1962
) | )
我想,应该是这样的:
[0] => Array
(
[manufacturer] => Ford
[founded] => 1903
[cars] => Array
(
[0] => Array
(
[model] => Model T
[debut] => 1908
)
[1] => Array
(
[model] => Mustang
[debut] => 1962
)
)
)
最终输出将是 JSON,就像上面的示例一样。
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: php mysql json join multidimensional-array