2016-01-20 73 views
0

我有一個JSON對象,我正在嘗試編寫一個foreach循環來輸出數組中的每條記錄。這是我的JSON對象代碼如何訪問與PHP嵌套在JSON中的數組

{ 
    "name": "Takeaway Kings", 
    "menu": { 
    "starter": [ 
     { 
     "name": "Samosas", 
     "price": 3.5 
     }, 
     { 
     "name": "Chaat", 
     "price": 1.99 
     } 
    ], 
    "dessert": [ 
     { 
     "name": "Kulfi", 
     "price": 2.5 
     }, 
     { 
     "name": "Kheer", 
     "price": 2.99 
     } 
    ], 
    "main": [ 
     { 
     "name": "Lamb Biryani", 
     "price": 4.5 
     }, 
     { 
     "name": "Chicken Tikka Masala", 
     "price": 5.99 
     } 
    ] 
    } 
} 

,這是目前我沒有任何的PHP代碼

$restaurant = json_decode(file_get_contents("restaurant.json")); 
$restaurant->menu[0]; 
foreach($starters as $starter){ 
    $name = $starter->name; 
    $price = $starter->price; 
    //do something with it 
    echo $name + " . " + $price; 
} 

正在輸出

+2

? – Daan

+0

您是否看到了此代碼生成的錯誤消息 – RiggsFolly

+0

您有沒有任何理由不使用'$ restaurant = json_decode(file_get_contents(「post.php」),true);'?因爲這樣可以很容易地遍歷數組。 –

回答

3

如果你看一個print_r($restaurant)的解碼JSON字符串當你不確定JSON語法時總是一個好的開始點,你會看到它有什麼結構。

stdClass Object 
(
    [name] => Takeaway Kings 
    [menu] => stdClass Object 
     (
      [starter] => Array 
       (
        [0] => stdClass Object 
         (
          [name] => Samosas 
          [price] => 3.5 
         ) 

        [1] => stdClass Object 
         (
          [name] => Chaat 
          [price] => 1.99 
         ) 

       ) 

      [dessert] => Array 
       (
        [0] => stdClass Object 
         (
          [name] => Kulfi 
          [price] => 2.5 
         ) 

        [1] => stdClass Object 
         (
          [name] => Kheer 
          [price] => 2.99 
         ) 

       ) 

      [main] => Array 
       (
        [0] => stdClass Object 
         (
          [name] => Lamb Biryani 
          [price] => 4.5 
         ) 

        [1] => stdClass Object 
         (
          [name] => Chicken Tikka Masala 
          [price] => 5.99 
         ) 
       ) 
     ) 
) 

而且在PHP中連接字符是.,而不是+

$restaurant = json_decode(file_get_contents("restaurant.json")); 

print_r($restaurant); 

foreach($restaurant->menu->starter as $starter){ 
    echo $starter->name . ' = ' . $starter->price . PHP_EOL; 
} 

會產生在哪裏`$ starters`定義輸出

Samosas = 3.5 
Chaat = 1.99 
+0

謝謝你的解釋幫了我很多 –

+0

不客氣。 – RiggsFolly

1

更換菜單[0]菜單和$ starter->名稱與$啓動[0] - > name和$ starter->價格與$啓動[0] - >價格是這樣的:

$restaurant = json_decode(file_get_contents("restaurant.json")); 
$starters = $restaurant->menu; 

foreach($starters as $starter){ 
    $name = $starter[0]->name; 
    $price = $starter[0]->price; 
    //do something with it 
    echo $name + " . " + $price; 
}