使用PHP访问嵌套的JSON
我创建了大部分,它工作正常。但是这是唯一嵌套的JSON。我如何访问它?我一直在尝试最长的时间,我想我可能会因为我认为这会很简单而导致大脑冻结。使用PHP访问嵌套的JSON
下面是GET从JSON文件所有保留的代码:
GET - Gets all Reservation by Status
$app->get('/reservation/:status', function($status) {
$dbHandler = new DatabaseHandler();
$dbHandler->connect();
$reservationArray = $dbHandler->runQueryWithOneParam('SELECT * FROM RestaurantDB.Reservation WHERE STATUS = ?', "s", $status);
$response = array();
$response["error"] = false;
$response["reservations"] = array();
while ($reservation = $reservationArray->fetch_assoc()) {
$tmpReservation = array();
$tmpReservation["ID"] = $reservation["ID"];
$tmpReservation["UserName"] = $reservation["UserName"];
$tmpReservation["NoOfPeople"] = $reservation["NoOfPeople"];
$tmpReservation["DateOfReservation"] = $reservation["DateOfReservation"];
$tmpReservation["TimeOfReservation"] = $reservation["TimeOfReservation"];
$tmpReservation["Status"] = $reservation["Status"];
$tmpReservation["TotalAmount"] = $reservation["TotalAmount"];
$tmpReservation["SpecialRequirement"] = $reservation["SpecialRequirement"];
$tmpReservation["Details"] = array();
$reservationDetailArray = $dbHandler->runQueryWithOneParam('SELECT * FROM RestaurantDB.ReservationDetail WHERE ReservationID = ?', "i", $reservation["ID"]);
while ($reservationDetail = $reservationDetailArray->fetch_assoc()) {
$tmpReservationDetails = array();
$tmpReservationDetails["ItemID"] = $reservationDetail["ItemID"];
$tmpReservationDetails["Quantity"] = $reservationDetail["Quantity"];
$tmpReservationDetails["SubTotal"] = $reservationDetail["SubTotal"];
array_push($tmpReservation["Details"], $tmpReservationDetails);
}
array_push($response["reservations"], $tmpReservation);
}
$dbHandler->disconnect();
echoResponse(200, $response);
});
的JSON显示为..
{
"ID": 5,
"UserName": "Coca Cola",
"NoOfPeople": 2,
"DateOfReservation": "1.79",
"TimOfReservation": null,
"Status": null,
"TotalAmount": null,
"SpecialRequirement": 0,
"Details": [
{
"ID": 1,
"ItemID": 3,
"Quantity": 2,
"SubTotal": ""
},
{
"ID": 2,
"ItemID": 4,
"Quantity": 2,
"SubTotal": 1.2
}
]
}
例如我可以使用显示预约状态的$reservation ["Status"]
但我似乎不知道如何从
"Details": [
{
"ID": 1,
"ItemID": 3,
"Quantity": 2,
"SubTotal": ""
},
这里是PHP代码..
<?php
include ('libs\WsURLs.php');
include ('libs\WsConsumer.php');
$wsConsumer = new WsConsumer();
$_POST = array();
$result = $wsConsumer->executeGET (GET_RESERVATION);
$reservations = $result ["reservations"];
// Populating the table
foreach ($reservations as $reservation) {
echo ('<tr>');
echo ('<td>' . $reservation ["Status"] . '</td>');
echo ('</tr>');
?>
$reservation["Details"]
是数组,则访问数组元素:
$reservation["Details"][$i]["ItemID"]
是在保留第i个项目的项目ID。
您可以遍历预订详情
foreach($reservation ["Details"] as $key=>value)
看到这个例子中,你可以去通过阵列,并提取值:
<?php
$json = '{
"ID": 5,
"UserName": "Coca Cola",
"NoOfPeople": 2,
"DateOfReservation": "1.79",
"TimOfReservation": null,
"Status": null,
"TotalAmount": null,
"SpecialRequirement": 0,
"Details": [
{
"ID": 1,
"ItemID": 3,
"Quantity": 2,
"SubTotal": ""
},
{
"ID": 2,
"ItemID": 4,
"Quantity": 2,
"SubTotal": 1.2
}
]
}';
$data = json_decode($json, true);
for($i = 0; $i < count($data['Details']); $i++) {
echo '<p>';
foreach($data['Details'][$i] as $key => $value) {
echo $key . ' -> ' . $value . '<br>';
}
echo '</p>';
}
你的情况,你可以这样做:
$id_search = 2;
foreach ($reservations as $reservation) {
for($i = 0; $i < count($reservation['Details']); $i++) {
if($id_search == $reservation['Details'][$i]['ID']) {
echo '<p>';
foreach($reservation['Details'][$i] as $key => $value) {
echo $key . ' -> ' . $value . '<br>';
}
echo '</p>';
}
}
}
这真是太棒了。它设法检索所有reservationId的数据!但是,我只想接收与特定reservationId匹配的数据。我有一个表格行,其中每个reservationId旁边都有一个按钮。我需要它仅返回与该reservationId相关的数据。这有任何意义吗? – user3081458 2015-03-31 05:39:03
@ user3081458如果您看到第二个代码,它将仅检索id = 2的预留。如果我的答案解决了您的问题,请记住您可以将其检查为已接受。如果你不知道你是如何阅读这个http://stackoverflow.com/tourn – 2015-04-05 03:49:54
@ user3081458你有什么进展? – 2015-04-07 17:30:27
你解决了你的问题吗? – 2015-05-01 18:52:37