У меня есть объект 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;
}
на данный момент ничего не выводится
Если вы посмотрите на 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
Замените 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;
}