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

Конвертирование массива в объект в PHP

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

Зачем это может понадобиться? Например, как известно в PHP есть суперглобальный массив $_REQUEST, который содержит все переменные переданные скрипту в url адресе. Так вот, эти данные нам необходимо предварительно очистить и привести к какому-то общему виду. Вот здесь-то можно использовать преобразование массива в объект в PHP.

В самом простом случаем преобразовать массив в объект в PHP можно следующим образом:

    $req = (object)$_REQUEST;

    // если нажата кнопка отправки формы
    if( $req -> btnSearch )
    {
        $cmd = '';
        switch($req -> type) {

            case 'phone':
                $cmd = Phone:class;

            case 'pc':
                $cmd = PC:class

        }

        print $cmd;
    }

Но это в том случае, если массив одномерный. А что, в массиве есть еще другие массивы? В этом случае нам поможет рекурсия:

<?php
    
    // функция рекурсивно преобразует массив в объект
    function array2object($array, &$obj)
    {
        foreach ($array as $key => $value)
        {
            if (is_array($value))
            {
                $obj->$key = new stdClass();
                array2object($value, $obj->$key);
            }
            else
            {
                $obj->$key = $value;
            }
        }
        
        return $obj;
    }


    function arrayToObject($array)
    {
        $object = new stdClass();
        return array2object($array,$object);
    }


    // многомерный массив
    $array = [
        'hello'  => '1',
        'open2'  => '2',
        'object' => [
                'obj' => 'inner',
                'inner3' => [
                    'object3' => 'Inner'
                ]
            ]
    ];

    // вызываем
    $req = arrayToObject($array);
    print_r($req);

Результат:

stdClass Object
(
    [hello] => 1
    [open2] => 2
    [object] => stdClass Object
        (
            [obj] => inner
            [inner3] => stdClass Object
                (
                    [object3] => Inner
                )

        )

)

Теперь можно обращаться к свойствам объекта следующим образом:

print $req -> object -> inner3 -> object3;

Вот таким образом, можно конвертировать (одномерный/многомерный) массив в объект в PHP.