Конвертирование массива в объект в 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.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.