Как получить все свойства объекта?

204
06 июля 2017, 03:31

вот объект

object(stdClass)#2258 (2) { 
    ["menus"]=> object(stdClass)#2253 (5) { 
        ["menu0"]=> object(stdClass)#2250 (1) { 
            ["title"]=> "menu0"} 
        ["menu1"]=> object(stdClass)#2254 (1) { 
            ["title"]=> "menu1" } 
        ["menu2"]=> object(stdClass)#2255 (1) { 
            ["title"]=> "menu2" } 
        ["menu3"]=> object(stdClass)#2256 (1) {
            ["title"]=> "menu3" } 
        ["menu4"]=> object(stdClass)#2257 (1) { 
            ["title"]=> "menu3"  }
    } 
    ["extra-1"]=> object(stdClass)#2260 (1) { 
        ["munu0"]=> object(stdClass)#2259 (9) { 
            ["title"]=> string(32) "extra-1 munu0"  } 
    } 
    ["extra-2"]=> object(stdClass)#2260 (1) { 
        ["munu0"]=> object(stdClass)#2259 (9) { 
            ["title"]=> string(32) "extra-2 munu0"  } 
    } 
    ["extra-3"]=> object(stdClass)#2260 (1) { 
        ["munu0"]=> object(stdClass)#2259 (9) { 
            ["title"]=> string(32) "extra-3 munu0"  } 
    } 
    ["extra-4"]=> object(stdClass)#2260 (1) { 
        ["munu0"]=> object(stdClass)#2259 (9) { 
            ["title"]=> string(32) "extra-4 munu0"  } 
    } 
}

как можно получить все свойства extra-* учитывая что их может не быть вообще и быть бесконечно много. Вообще желательно получить свойства menu0 свойств extra-*

Answer 1

Если этот объект получился из JSON, то да, как пишут другие нужно просто правильно указать второй параметр у json_decode

json_decode($value,false) - возвращает stdObject json_decode($value,true) - возвращает массив

Если же приходится работать именно с объектом, то есть два варианта:
1. Преобразовать в json и обратно уже в массив json_decode(json_encode($object),true) 2. Воспользоваться функцией get_object_vars и получить массив свойств объекта

При любых раскладах получаем массив, проходим циклом и находим нужные ключи и их значения

Пример с JSON:

//Если у нас именно объект а не готовый JSON
$array = json_decode(json_encode($object),true)
foreach ($array as $key => $value) {
    //вместо strpos можно и регуляркой
    if (strpos($key,'extra') ===  0 && isset($value['menu0']['title'])) {
        echo $value['menu0']['title'].'<br/>';
    }   
}

Пример с использованием get_object_vars:

$objectVars = get_object_vars($object);
foreach ($objectVars as $key => $value) {
    //вместо strpos можно и регуляркой
    if (strpos($key,'extra') ===  0 && isset($value->menu0->title)) {
        echo $value->menu0->title.'<br/>';
    }
}
READ ALSO
Даты между php и mssql

Даты между php и mssql

Добрый день!

180
Существует ли библиотека для веб с интеграцией chat-sdk?

Существует ли библиотека для веб с интеграцией chat-sdk?

Есть хорошая Chat-SDK, построенная на Firebase : SDK Вопрос: есть ли уже готовая интеграция с этой SDK для WEB? PS

176
Как правильно прописать условие

Как правильно прописать условие

Задача такая - в ocstore нужно сделать что бы заголовок раздела был h1 если описание раздела пустое, но если описание раздела заполнено, то h2

218
xhprof не сохраняется результат

xhprof не сохраняется результат

В файле /etc/phpd/xhprof

192