Я сталкиваюсь с несколькими проблемами при попытке декодирования этого многомерного массива JSON с помощью PHP:
{"123456":{"info":[
{"maxlength":null,"value":"$Name","options_hash":null},
{"maxlength":null,"value":"$prefix","options_hash":{" Mr. ":"Mr."," Mrs. ":"Mrs."}},
]
}
}
Я распечатал массив с помощью var_export, чтобы лучше понять структуру:
array (
'123456' =>
array (
'info' =>
array (
0 =>
array (
'maxlength' => NULL,
'value' => '$Name',
'options_hash' => NULL,
),
1 =>
array (
'maxlength' => NULL,
'value' => '$prefix',
'options_hash' =>
array (
' Mr. ' => 'Mr.',
' Mrs. ' => 'Mrs.',
),
),
),
),
),
),
)
Все, что я пытаюсь сделать, это напечатать значение внутри массива в пределах информации, $ Name и $ Prefix.
Я попытался использовать цикл foreach, но я немного смущен тем, как он должен быть структурирован:
foreach ($json["123456"] as $info)
{
$array = $info["info"];
foreach($array as $values)
{
echo $values["value"];
}
}
Доступ к элементам массива осуществляется через [], объекты объекта ->
$jsonStr= '{"123456": {"info":[
{"maxlength":null,"value":"$Name","options_hash":null},
{"maxlength":null,"value":"$prefix","options_hash":{" Mr. ":"Mr."," Mrs. ":"Mrs."}}
]}}';
$json = json_decode($jsonStr);
foreach ($json as $level1) { // this will give us everything nested to the same level as 123456
foreach($level1 as $info) { // this will give us everything nested to the same level as info
foreach($info as $values) { // this will give us each of the items in the info array
echo $values->value; // this prints out the $Name and $prefix
}
}
}
// if you really want to start in a level
foreach($json->{'123456'} as $info) { // this will give us everything nested to the same level as info
foreach($info as $values) { // this will give us each of the items in the info array
echo $values->value; // this prints out the $Name and $Prefix
}
}
Вероятно, вам придется изменить несколько вещей с помощью вашего foreach. Имейте в виду, что {}
в json-картах для объекта, а не для массива.
$json = json_decode($the_string);
foreach ($json->{'123456'} as $info) {
echo $info->value;
}
Проблема закончилась форматированием внутри цикла foreach. Связывание правильного синтаксиса ниже:
foreach ($json->123456->info as $info) {
echo $info->value;
}
?>