Найти в Дзене
Q-ANSWER

Преобразование объекта PHP в ассоциативный массив

Я интегрирую API на свой сайт, который работает с данными, хранящимися в объектах, в то время как мой код написан с использованием массивов. Мне нужна быстрая и грязная функция для преобразования объекта в массив. Пример: простой объект $object = new StdClass;
$object->foo = 1;
$object->bar = 2;
var_dump( (array) $object );
Вывод: array(2) {
'foo' => int(1)
'bar' => int(2)
}
Пример: сложный объект class Foo
{
private $foo;
protected $bar;
public $baz;
public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}
}
var_dump( (array) new Foo );
Выход (с редактированием \0s для ясности): array(3) {
'\0Foo\0foo' => int(1)
'\0*\0bar' => int(2)
'baz' => class stdClass#2 (0) {}
}
Вывод с var_export вместо var_dump: array (
'' . "\0" . 'Foo' . "\0" . 'foo' => 1,
'' . "\0" . '*' . "\0" . 'bar' => 2,
'baz' =>
stdClass::__set_state(array(
)),
)
Указание этого способа не приведет к глу

Я интегрирую API на свой сайт, который работает с данными, хранящимися в объектах, в то время как мой код написан с использованием массивов.

Мне нужна быстрая и грязная функция для преобразования объекта в массив.

Пример: простой объект

$object = new StdClass;
$object->foo = 1;
$object->bar = 2;

var_dump( (array) $object );

Вывод:

array(2) {
'foo' => int(1)
'bar' => int(2)
}

Пример: сложный объект

class Foo
{
private $foo;
protected $bar;
public $baz;

public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}
}

var_dump( (array) new Foo );

Выход (с редактированием \0s для ясности):

array(3) {
'\0Foo\0foo' => int(1)
'\0*\0bar' => int(2)
'baz' => class stdClass#2 (0) {}
}

Вывод с var_export вместо var_dump:

array (
'' . "\0" . 'Foo' . "\0" . 'foo' => 1,
'' . "\0" . '*' . "\0" . 'bar' => 2,
'baz' =>
stdClass::__set_state(array(
)),
)

Указание этого способа не приведет к глубокому кастингу графа объектов, и вам необходимо применить нулевые байты (как описано в ручной цитате) для доступа к любым непубличным атрибутам. Таким образом, это лучше всего работает при бросании объектов или объектов StdClass только с общедоступными свойствами. Для быстрой и грязной (то, что вы просили) это хорошо.

Все ответы можно глянуть тут http://q-answer.ru/questions/preobrazovanie-ob-ekta-php-v-associativnyy-massiv-36689.html