2015-03-31 113 views
1

我創建了大部分,它工作正常。但是這是唯一嵌套的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>'); 
?> 
+0

你解決了你的問題嗎? – 2015-05-01 18:52:37

回答

0

$reservation["Details"]是數組,則訪問數組元素:

$reservation["Details"][$i]["ItemID"] 

是在保留第i個項目的項目ID。

0

您可以遍歷預訂詳情

foreach($reservation ["Details"] as $key=>value) 
0

看到這個例子中,你可以去通過陣列,並提取值:

<?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>'; 
} 

    }  
    } 
+0

這真是太棒了。它設法檢索所有reservationId的數據!但是,我只想接收與特定reservationId匹配的數據。我有一個表格行,其中每個reservationId旁邊都有一個按鈕。我需要它僅返回與該reservationId相關的數據。這有任何意義嗎? – user3081458 2015-03-31 05:39:03

+0

@ user3081458如果您看到第二個代碼,它將僅檢索id = 2的預留。如果我的答案解決了您的問題,請記住您可以將其檢查爲已接受。如果你不知道你是如何閱讀這個http://stackoverflow.com/tourn – 2015-04-05 03:49:54

+0

@ user3081458你有什麼進展? – 2015-04-07 17:30:27