Супер-Пупер сайт
Преобразование объекта в массив с помощью PHP
Преобразование объекта в массив с помощью PHP происходит с небольшой проблемой. Изначально можно подумать, что это простая задача, решаемая одной строчкой кода. Но это возможно только для простых объектов, а с увеличение сложности объекта - усложняется и задача.
<?php
/*** создание объекта ***/
$obj = new stdClass;
$obj->foo = 'foo';
$obj->bar = 'bar';
$obj->baz = 'baz';
/*** преобразование в массив ***/
$array = (array) $obj;
/*** просмотр результата ***/
print_r( $array );
?>
В коде выше мы преобразовываем объект в массив свойств. Результат его обработки и вывода показан ниже.
Array
(
[foo] => foo
[bar] => bar
[baz] => baz
)Давайте усложним задачу, сделав свойство bar объектом.
<?php
/*** усложним наш будущий массив ***/
$obj = new stdClass;
$obj->foo = 'foo';
$obj->bar = new stdClass;
$obj->bar->baz = 'baz';
/*** преобразование объекта в массив ***/
$array = (array) $obj;
/*** просмотр результата ***/
print_r( $array );
?>
Из кода выше можно увидеть, что свойство bar содержит экземпляр класса StdClass. В этом можно убедиться просмотрев результат вывода.
Array
(
[foo] => foo
[bar] => stdClass Object
(
[baz] => baz
)
)Как видите, что простого преобразования не достаточно для решения казалось бы тривиальной задачи. Для исправления этой ситуации нам потребуется добавить проверку, которая при нахождении объекта будет производить преобразование.
<?php
/*** сложный объект ***/
$obj = new stdClass;
$obj->foo = new stdClass;
$obj->foo->baz = 'baz';
$obj->bar = 'bar';
/**
*
* Преобразование объекта в массив
*
* @param object $object преобразуемый объект
* @reeturn array
*
*/
function objectToArray( $object )
{
if( !is_object( $object ) && !is_array( $object ) )
{
return $object;
}
if( is_object( $object ) )
{
$object = get_object_vars( $object );
}
return array_map( 'objectToArray', $object );
}
/*** преобразование объекта в массив ***/
$array = objectToArray( $obj );
/*** просмотр массива ***/
print_r( $array );
?>
В результате мы получили многомерный массив, который является истинным представлением массива объекта.
Array
(
[foo] => Array
(
[baz] => baz
)
[bar] => bar
)
Источник: Convert Object To Array With PHP
Перевод: www.superpupersite.com
2010-07-30 19:33