Думаю, что каждый РНР программист рано или поздно сталкивается с объектами stdClass (stdClass принадлежит к предопределенным классам PHP). Чаще всего хотелось бы работать не с объектами, а с массива, чтобы была возможность сортировки, перебора и так далее, для этого требуется объект stdClass преобразовать в массив. Для объекта у которого нет вложенных свойств все просто:
$oStdClass = new stdClass; $oStdClass->sTest = "Тестовая строка"; $arStdClass = (array)$oStdClass; print_r($arStdClass);
Но часто, например, при работе с SOAP протоколом у stdClass объекта, есть еще дополнительные вложенные объекты класса stdClass, такие объекты необходимо преобразовать в многомерный PHP массив.
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); ...
function arrayToObject($arData) { if (is_array($arData)) { return (object) array_map(__FUNCTION__, $arData); } else { return $arData; } }
При необходимости оформить методом класса, необходимо проделать такие же манипуляции что и для метода objectToArray
.