2016-01-20 72 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; 
}