Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP访问嵌套JSON_Php_Html_Json_Web Services - Fatal编程技术网

使用PHP访问嵌套JSON

使用PHP访问嵌套JSON,php,html,json,web-services,Php,Html,Json,Web Services,我已经创造了大部分的部分,它工作得很好。但这是唯一嵌套的JSON。如何访问它?我已经试了很长时间了,我想我的大脑可能会冻结,因为我觉得这很简单 以下是从JSON文件获取所有保留的代码: GET - Gets all Reservation by Status $app->get('/reservation/:status', function($status) { $dbHandler = new DatabaseHandler();

我已经创造了大部分的部分,它工作得很好。但这是唯一嵌套的JSON。如何访问它?我已经试了很长时间了,我想我的大脑可能会冻结,因为我觉得这很简单

以下是从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>';
}    

哥们,太棒了。它成功地检索了所有reservationId的数据!但是,我只希望接收与特定reservationId匹配的数据。我有一个表行,每个预订ID旁边都有一个按钮。我只需要它带回与该预订相关的数据。这有什么意义吗?@user3081458如果您看到第二个代码,它只检索id=2的预订。如果我的答案解决了你的问题,记住你可以检查它是否被接受。如果你不知道怎么读这个@user3081458,你会有进步吗?你能解决你的问题吗?
 $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>';
}

   }     
    }