Перейти к содержимому

Как объект превратить в массив php

  • автор:

ArrayObject::__construct

Параметр array принимает значение типа array или Object .

Флаги для управления поведением объекта ArrayObject . Смотрите ArrayObject::setFlags() .

Указывает класс, который будет использоваться в качестве итератора объекта ArrayObject . Класс должен реализовать интерфейс ArrayIterator .

Примеры

Пример #1 Пример использования ArrayObject::__construct()

$arrayobject = new ArrayObject ( $array );

Результат выполнения приведённого примера:

object(ArrayObject)#1 (3) < [1]=>string(3) "one" [2]=> string(3) "two" [3]=> string(5) "three" >

Преобразовать объект в массив PHP

Хотел бы поинтересоваться, как преобразовать объект, получаемый от АПИ Телеграмма. Ниже моя попытка:

 $Image = []; for ($i=0; $i < 100; $i++) < $photo = new \TelegramBot\Api\Types\Inline\QueryResult\Photo($i,'http://site.ru/telegram/image/'.$i.'.jpg', 'http://site.ru/telegram/thumbinals/1.jpg'); (array) $photo; $Image = $photo[$i]; >var_dump((array)$Image); $result = $bot->answerInlineQuery($qid, $Image, 100, false); 

Отслеживать

задан 17 апр 2019 в 16:59

Виталий Кессель Виталий Кессель

15 3 3 бронзовых знака

$result = (array) $result;

Commented 17 апр 2019 в 17:07

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

Commented 17 апр 2019 в 17:07

Максим Степанов, Это не подходит, потому что нужно преобразовывать до запроса. Я хочу сделать так, чтобы был массив типа: array($url1, $url2, $url3, . ,$urlN).

Commented 17 апр 2019 в 17:09

rjhdby, не очень вас понял. Когда его тогда присваивать?

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

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

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

Ответ 1

Просто введите это:

$array = (array) $yourObject;

Из документации по массивам:

Если объект преобразуется в массив, результатом будет массив, элементами которого являются свойства объекта. Ключами являются имена переменных-членов, за некоторыми примечательными исключениями: целочисленные свойства недоступны; частные переменные имеют имя класса, добавляемое к имени переменной; защищенные переменные имеют ‘*’, добавляемое к имени переменной. Эти добавленные значения имеют нулевые байты по обе стороны.

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

$object = new StdClass;

$object->foo = 1;

$object->bar = 2;

var_dump( (array) $object );

Вывод:

array(2)

‘foo’ => int(1)

‘bar’ => int(2)

>

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

класс 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 );

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

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 или объектов, имеющих только публичные свойства. Для быстрого и безопасного (то, о чем вы просили) это подходит.

Ответ 2

Ответ 3

Если свойства вашего объекта являются общедоступными, вы можете:

$array = (array) $object;

Если же они имеют модификаторы private или protected, у них будут неопределенные имена ключей в массиве. Итак, в этом случае вам понадобится следующая функция:

function dismount($object)

$reflectionClass = new ReflectionClass(get_class($object));

$array = array();

foreach ($reflectionClass->getProperties() as $property)

$property->setAccessible(true);

$array[$property->getName()] = $property->getValue($object);

$property->setAccessible(false);

>

return $array;

>

Ответ 4

class Test

const A = 1;

public $b = ‘two’;

private $c = test::A;

public function __toArray()

return call_user_func(‘get_object_vars’, $this);

>

>

$my_test = new Test();

var_dump((array)$my_test);

var_dump($my_test->__toArray());

Вывод

array(2)

[«b»] => string(3) «two»

[«Testc»]=> int(1)

>

array(1)

[«b»] => string(3) «two»

>

Ответ 5

Вот код:

function object_to_array($data)

if ((! is_array($data)) and (! is_object($data)))

return ‘xxx’; // $data;

$result = array();

$data = (array) $data;

foreach ($data as $key => $value)

if (is_object($value))

$value = (array) $value;

if (is_array($value))

$result[$key] = object_to_array($value);

else

$result[$key] = $value;

>

return $result;

>

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

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

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

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

Ответ 1

Просто введите это:

$array = (array) $yourObject;

Из документации по массивам:

Если объект преобразуется в массив, результатом будет массив, элементами которого являются свойства объекта. Ключами являются имена переменных-членов, за некоторыми примечательными исключениями: целочисленные свойства недоступны; частные переменные имеют имя класса, добавляемое к имени переменной; защищенные переменные имеют ‘*’, добавляемое к имени переменной. Эти добавленные значения имеют нулевые байты по обе стороны.

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

$object = new StdClass;

$object->foo = 1;

$object->bar = 2;

var_dump( (array) $object );

Вывод:

array(2)

‘foo’ => int(1)

‘bar’ => int(2)

>

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

класс 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 );

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

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 или объектов, имеющих только публичные свойства. Для быстрого и безопасного (то, о чем вы просили) это подходит.

Ответ 2

Ответ 3

Если свойства вашего объекта являются общедоступными, вы можете:

$array = (array) $object;

Если же они имеют модификаторы private или protected, у них будут неопределенные имена ключей в массиве. Итак, в этом случае вам понадобится следующая функция:

function dismount($object)

$reflectionClass = new ReflectionClass(get_class($object));

$array = array();

foreach ($reflectionClass->getProperties() as $property)

$property->setAccessible(true);

$array[$property->getName()] = $property->getValue($object);

$property->setAccessible(false);

>

return $array;

>

Ответ 4

class Test

const A = 1;

public $b = ‘two’;

private $c = test::A;

public function __toArray()

return call_user_func(‘get_object_vars’, $this);

>

>

$my_test = new Test();

var_dump((array)$my_test);

var_dump($my_test->__toArray());

Вывод

array(2)

[«b»] => string(3) «two»

[«Testc»]=> int(1)

>

array(1)

[«b»] => string(3) «two»

>

Ответ 5

Вот код:

function object_to_array($data)

if ((! is_array($data)) and (! is_object($data)))

return ‘xxx’; // $data;

$result = array();

$data = (array) $data;

foreach ($data as $key => $value)

if (is_object($value))

$value = (array) $value;

if (is_array($value))

$result[$key] = object_to_array($value);

else

$result[$key] = $value;

>

return $result;

>

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *