2015-08-20 3 views
-1

Мне интересно, есть ли встроенный способ в PHP до листинг многомерные объекты для массивов?PHP - как бросить многомерный объект?

Проблема заключается в применении регулярного литья на объект, только первое измерение только, все остальные размеры напоминают то же самое.

Примечание: Меня интересует литье только!

Пример:

$a = new stdClass(); 
$a->b = 'qwe'; 
$a->c = new stdClass(); 
$a->c->d = 'asd'; 

var_dump((array)$a); // echoes: 

array(2) { 
    ["b"]=> 
    string(3) "qwe" 
    ["c"]=> 
    object(stdClass)#2 (1) { 
    ["d"]=> 
    string(3) "asd" 
    } 
} 

Как вы можете видеть только первый аспект был затронут, так как бросить многомерные объекты?

+0

Я не совсем понял. Ваш код и вывод кажутся правильными. Что именно вы ожидали от этого? –

+0

$ a-> c все еще объект. Я хочу, чтобы он был массивом. – Boarking

+4

Возможно дублировать? http://stackoverflow.com/questions/13567939/convert-multidimensional-objects-to-array – sanderbee

ответ

0

Поскольку ваш вопрос, если это возможно, используя только один встроенный в функции PHP рекурсивно отливать объекта и дети объектов в виде массива, без даже любого пользователя из функции обратного вызова, ответ нет, это невозможно.

Есть и другие способы его достижения.

2

Нет официального способа приведения многоуровневого объекта в массив, но хорошей новостью является то, что есть взлома.

Используйте json_encode(), чтобы получить представление JSON вашего объекта затем передать результат в json_decode() и использовать TRUE в качестве второго аргумента, чтобы получить массивы вместо объектов.

$a = new stdClass(); 
$a->b = 'qwe'; 
$a->c = new stdClass(); 
$a->c->d = 'asd'; 

print_r(json_decode(json_encode($a), TRUE)); 

Выход:

Array 
(
    [b] => qwe 
    [c] => Array 
     (
      [d] => asd 
     ) 

) 

метод имеет некоторые недостатки (он не может обрабатывать ресурсы, например), но они просто немного раздражали.

+0

Ха. Щелчок! Удаление почти идентичного ответа :) –

Смежные вопросы