【发布时间】:2016-05-18 18:50:36
【问题描述】:
我对 3 个表运行查询,并尝试将结果格式化为嵌套数组。这是让我难倒的内部数组。大小数组应该在啤酒数组对象中,但在它之外。任何帮助表示赞赏。
JSON
{
"brewerId": "41",
"brewerName": "Prancing Pony Brewing",
"beers": [
{
"beerid": "816",
"productName": "Prancing Pony Amber Ale",
"ibu": "18.00",
"abv": "5.00",
"style": "Amber Ale"
},
{
"beerid": "817",
"productName": "Prancing Pony Copper Ale",
"ibu": "25.00",
"abv": "5.80",
"style": "Indian Pale Ale"
},
{
"beerid": "837",
"productName": "Prancing Pony Pale Ale",
"ibu": "37.00",
"abv": "5.50",
"style": "Pale Ale"
},
{
"beerid": "838",
"productName": "Prancing Pony India Red Ale",
"ibu": "60.00",
"abv": "7.90",
"style": "Indian Pale Ale"
}
],
"sizes": [
{
"beerId": "816",
"size": "330ml Bottle"
},
{
"beerId": "816",
"size": "330ml Can"
},
{
"beerId": "837",
"size": "345ml Can"
},
{
"beerId": "837",
"size": "375ml Bottle"
}
]
},
PHP
$result = $func->getBrewers();
$json_response = array();
while ($row = mysqli_fetch_array($result))
{
$row_array = array();
$row_array['brewerId'] = $row['brewerId'];
$row_array['brewerName'] = $row['brewerName'];
$row_array['beers'] = array();
$brewer_pk = $row['brewerId'];
$beer_qry = $func->getBeers($brewer_pk);
while ($beer_fet = mysqli_fetch_array($beer_qry))
{
$row_array['beers'][] = array(
'beerid' => $beer_fet['beerid'],
'productName' => $beer_fet['productName'],
'ibu' => $beer_fet['ibu'],
'abv' => $beer_fet['abv'],
'notes' => $beer_fet['notes'],
'style' => $beer_fet['style'],
);
$beer_pk = $beer_fet['beerid'];
$size_qry = $func->getSizes($beer_pk);
while ($size_fet = mysqli_fetch_array($size_qry))
{
$row_array['sizes'][] = array(
'beerId' => $size_fet['beerId'],
'size' => $size_fet['size'],
);
}
}
array_push($json_response, $row_array);
}
echo json_encode($json_response);
【问题讨论】:
-
这种方法的性能和可扩展性很糟糕。在解析返回的行时运行单个连接查询并构建嵌套。