Преобразование объекта в массив с помощью PHP

Преобразование объекта в массив с помощью PHP происходит с небольшой проблемой. Изначально можно подумать, что это простая задача, решаемая одной строчкой кода. Но это возможно только для простых объектов, а с увеличение сложности объекта — усложняется и задача.

foo = ‘foo’; $obj->bar = ‘bar’; $obj->baz = ‘baz’; /*** преобразование в массив ***/ $array = (array) $obj; /*** просмотр результата ***/ print_r( $array ); ?>

В коде выше мы преобразовываем объект в массив свойств. Результат его обработки и вывода показан ниже. Array ( [foo] => foo [bar] => bar [baz] => baz ) Давайте усложним задачу, сделав свойство bar объектом.

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 ) ) Как видите, что простого преобразования не достаточно для решения казалось бы тривиальной задачи. Для исправления этой ситуации нам потребуется добавить проверку, которая при нахождении объекта будет производить преобразование.

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 )