Мне интересно, если есть встроенный путь в 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"}
}
Как вы можете видеть, было затронуто только первое измерение, так как же привести в действие многомерные объекты?
Так как ваш вопрос, если это возможно, используя только один встроенный PHP функция для рекурсивного бросать объект и дочерние объекты как массив, без даже любая пользовательская функция обратного вызова, ответ нет, это не может быть сделано так.
Однако есть и другие способы достичь этого.
Официального способа приведения многоуровневого объекта в массив не существует, но есть и хорошая новость: существует взлом.
использование 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
)
)
У этого метода есть некоторые недостатки (например, он не может обрабатывать ресурсы), но это всего лишь мелкие неприятности.