Новый ответ
Относительно вашего исправленного вопроса: foreach
на самом деле работает как со свойствами, так и с многозначными элементами (массивами), подробности здесь . Например, со строкой JSON в вашем вопросе:
$data = json_decode($json);
foreach ($data as $name => $value) {
// This will loop three times:
// $name = inbox
// $name = sent
// $name = draft
// ...with $value as the value of that property
}
В вашем основном цикле по свойствам вы можете использовать внутренний цикл для просмотра записей массива, на которые указывает каждое свойство. Например, если вы знаете , что каждое из свойств верхнего уровня имеет значение массива и что каждая запись массива имеет свойство "firstName", этот код:
$data = json_decode($json);
foreach ($data as $name => $value) {
echo $name . ':'
foreach ($value as $entry) {
echo ' ' . $entry->firstName;
}
}
... покажет:
inbox:
Brett
Jason
Elliotte
sent:
Issac
Tad
Frank
draft:
Eric
Sergei
Старый ответ (ы)
Начать редактирование
Ваш комментарий:
Теперь я хотел бы узнать, как декодировать строку JSON с несколькими объектами!
В примере, который вы опубликовали , есть несколько объектов, все они содержатся внутри одного объекта-оболочки. Это требование JSON ; Вы не можете (например) сделать это:
{"name": "I'm the first object"},
{"name": "I'm the second object"}
Этот JSON недействителен. Там имеет , чтобы быть единственным объектом верхнего уровня. Может содержать только массив:
{"objects": [
{"name": "I'm the first object"},
{"name": "I'm the second object"}
]}
... или, конечно, вы можете дать имена отдельным объектам:
{
"obj0": {"name": "I'm the first object"},
"obj1": {"name": "I'm the second object"}
}
Конец редактирования
Ваш пример - один объект, содержащий три свойства, значением каждого из которых является массив объектов. На самом деле, это не сильно отличается от примера в вопросе, который вы связали (у которого также есть объект со свойствами, которые имеют значения массива).
Итак:
$data = json_decode($json);
foreach ($data->programmers as $programmer) {
// ...use $programmer for something...
}
foreach ($data->authors as $author) {
// ...use $author for something...
}
foreach ($data->musicians as $musician) {
// ...use $musician for something...
}