массивы — как привести многомерный объект?

Мне интересно, если есть встроенный путь в 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"}
}

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

-1

Решение

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

Однако есть и другие способы достичь этого.

0

Другие решения

Официального способа приведения многоуровневого объекта в массив не существует, но есть и хорошая новость: существует взлом.

использование 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
)

)

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

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector