Возврат объектов из многомерного массива JSON в PHP

0

Я сталкиваюсь с несколькими проблемами при попытке декодирования этого многомерного массива 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"];
           }
     }
  • 0
    Это декодирование нормально. Вы должны правильно построить JSON в первую очередь. Вы кодируете буквальную строку '$ Name'. Помните, что переменные PHP раскрываются только в «строках», а не в «строках».
Теги:
arrays
multidimensional-array

3 ответа

0
Лучший ответ

Доступ к элементам массива осуществляется через [], объекты объекта ->

 $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
    }
}
0

Вероятно, вам придется изменить несколько вещей с помощью вашего foreach. Имейте в виду, что {} в json-картах для объекта, а не для массива.

$json = json_decode($the_string);

foreach ($json->{'123456'} as $info) {
       echo $info->value;
 }
0

Проблема закончилась форматированием внутри цикла foreach. Связывание правильного синтаксиса ниже:

foreach ($json->123456->info as $info) {
       echo $info->value;
 }

?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню