Есть ответы на вопросы сертификации? Хочешь поделиться новостью о своем проекте? Тогда пиши нам!

Преобразование PHP stdClass в массив и обратно

Преобразование PHP stdClass в массив и обратно

Думаю, что каждый РНР программист рано или поздно сталкивается с объектами stdClass (stdClass принадлежит к предопределенным классам PHP). Чаще всего хотелось бы работать не с объектами, а с массива, чтобы была возможность сортировки, перебора и так далее, для этого требуется объект stdClass преобразовать в массив. Для объекта у которого нет вложенных свойств все просто:

$oStdClass = new stdClass;
$oStdClass->sTest = "Тестовая строка";

$arStdClass = (array)$oStdClass;
print_r($arStdClass);

Но часто, например, при работе с SOAP протоколом у stdClass объекта, есть еще дополнительные вложенные объекты класса stdClass, такие объекты необходимо преобразовать в многомерный PHP массив.

Функция для преобразования stdClass объекта в многомерный массив

function objectToArray($oStdClass) {
    if (is_object($oStdClass)) {
        $oStdClass = get_object_vars($oStdClass);
    }

    if (is_array($oStdClass)) {
        return array_map(__FUNCTION__, $oStdClass);
    }
    else {
        return $oStdClass;
    }
}

Если Вы решите данную функцию оформить в виде метода класса, то стоит сделать его статическим и изменить вызов array_map:

...
return array_map('self::' . __FUNCTION__, $oStdClass);
...

Функция преобразования многомерного массива в PHP stdClass объект

function arrayToObject($arData) {
    if (is_array($arData)) {
        return (object) array_map(__FUNCTION__, $arData);
    } else {
        return $arData;
    }
}

При необходимости оформить методом класса, необходимо проделать такие же манипуляции что и для метода objectToArray.

 486 PHP, Сниппет, Полезности, stdClass
17 июля 2017
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Возможно Вам будет интересно

Комментарии

Чтобы оставлять комментарии необходимо зарегистрироваться и пройти авторизацию.