Главная страница · Программирование на языке PHP · Преобразование объекта в массив с помощью PHP

Преобразование объекта в массив с помощью 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