Как получить доступ к массиву, вложенному в JSON с помощью переполнения стека

У меня есть объект JSON, и я пытаюсь написать цикл foreach для вывода каждой записи в массиве. Это мой код объекта 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;
}

на данный момент ничего не выводится

0

Решение

Если вы посмотрите на 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;
}

Будет производить вывод

Samosas = 3.5
Chaat = 1.99
3

Другие решения

Замените menu [0] на menu и $ starter-> name на $ starter [0] -> name и $ starter-> price на $ starter [0] -> price следующим образом:

$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;
}
1

По вопросам рекламы [email protected]