Я читал в этом посте Получите PHP свойство класса по строке , что я могу получить доступ к свойству с помощью переменной типа - echo $ obj -> $ prop. Однако моя проблема немного отличается, и я не могу найти правильный ответ для вложенного свойства. В приведенном примере показан уровень 1. Мне нужно что-то, что может работать на 1 или более уровней. Мне нужно получить динамический доступ к «состоянию» с помощью переменной.
$str = '{
"health" : {
"status" : "UP"
}
"db" : {
"postgres" : {
"status" : "UP"
}
}
"disk" : {
"status" : "UP"
}
}';
$healthcheck = "health->status";
или
$dbcheck = "disk->status";
или в некоторых случаях
$dbcheck = "db->postgres->status"
или в другие случаи
$dbcheck = "db->postgres[0]->status"
И я надеюсь использовать приведенные выше строки для динамического доступа к значениям.
Но мой код ниже дает сбой:
$obj = json_decode( $str );
echo $obj->$healthcheck;
PHP Notice: Undefined property: stdClass::$health->status
I знаю, что структура json существует, я просто не нахожу правильный способ доступа к подэлементу.
Если я попробую его как оригинальный пост и изменим
// $healthcheck = "health->status";
$healthcheck = "health";
print_r( $obj->$healthcheck );
, он будет работать хорошо. Очевидно, я использую print_r (), так как «health» - это объект, а «print» или «echo» не будет печатать объект.
stdClass Object
(
[status] => UP
)
Как получить доступ к вложенным свойствам?