Конвертировать объект в массив php
Как преобразовать объект в массив?
Как преобразовать этот объект в массив? Я хотел бы вывести следующее:
Будьте осторожны: для примитивных типов данных, таких как строки, он будет работать отлично, но я не знаю, как он ведет себя с вложенными объектами.
в вашем случае вам нужно что-то сделать;
Одномерные массивы
Многомерные массивы
Несколько грязным методом является использование собственных функций JSON PHP> = 5.2 для кодирования JSON и последующего декодирования обратно в массив. Однако это не будет включать частных и защищенных членов.
В качестве альтернативы, следующая функция будет конвертировать из объекта в массив, включая частные и защищенные члены, взятые отсюда и измененные для использования кастинга:
делает мелкое преобразование ($ object-> innerObject = new stdClass () остается объектом) и конвертирует назад и вперед, используя json works, но это не очень хорошая идея, если производительность является проблемой.
Если вам нужны все объекты, которые нужно преобразовать в ассоциативные массивы, вот лучший способ сделать это (код изрывается из того, что я не помню где):
Вы можете быстро преобразовать глубоко вложенные объекты в ассоциативные массивы, опираясь на поведение функций кодирования / декодирования JSON:
Простая версия:
Обновленная рекурсивная версия:
Я попробовал несколько способов сделать foreach с объектом, и это действительно самый простой и крутой обходной путь, который я видел. Всего одна строка 🙂
Вы также можете использовать метод array_values () php
Я столкнулся с проблемой с ответом Энди Эрншоу, потому что я включил эту функцию в отдельный класс в моем приложении «HelperFunctions», что означало, что рекурсивный вызов objectToArray () не удался.
Я преодолел это, указав имя класса в вызове array_map следующим образом:
Я бы написал это в комментариях, но пока у меня недостаточно репутации.
Преобразовать в PHP объекта в ассоциативный массив
я интегрирую API на свой сайт, который работает с данными, хранящимися в объектах, в то время как мой код написан с использованием массивов.
Мне нужна быстрая и грязная функция для преобразования объекта в массив.
27 ответов
просто typecast это
если объект преобразуется в массив, результатом является массив, элементы которого являются свойствами объекта. Ключи-это имена переменных-членов с несколькими заметными исключениями: целочисленные свойства недоступны; частные переменные имеют имя класса, добавленное к имени переменной; защищенные переменные имеют’*’, добавленное к имя переменной. Эти добавленные значения имеют нулевые байты с обеих сторон.
Пример: Простой Объект
Пример: Сложный Объект
вывод (с \ 0s отредактировано для ясности):
выход с var_export вместо var_dump :
Typecasting этот путь не будет делать глубоко приведение графа объекта и вам нужно применить нулевые байты (как описано в цитате вручную) для доступа к любым непубличным атрибутам. Таким образом, это лучше всего работает при кастинге объектов StdClass или объектов только с общедоступными свойствами. Для быстрого и грязного (то, что вы просили) это нормально.
вы можете быстро преобразовать глубоко вложенные объекты в ассоциативные массивы, полагаясь на поведение функций кодирования/декодирования JSON:
С первого хита Google для»объект php для массива assoc» у нас есть это:
Если ваши свойства объекта являются общедоступными, вы можете сделать:
если они являются частными или защищенными, они будут иметь странные имена ключей в массиве. Итак, в этом случае вам понадобится следующая функция:
Из объекта в массив
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Добавить в начало объекта в массив объекта
Здравствуйте. Есть xml файл на который натравлен new SimpleXMLElement. Одна из веток содержит.
Создайте массив типа Employee и сохраните в него 3 объекта класса Employee и 3 объекта класса Manager
Здравствуйте! Задача: Создайте массив типа Employee и сохраните в него 3 объекта класса Employee.
Добавление объекта в массив
Добрый вечер. Прошу помочь разобраться, почему объект добавляется в массив до строчки, где я.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Десериализация объекта в массив
Извиняюсь за беспокойство. Нужна помощь в реализации десериализации объектов в массив.
Добавление объекта в массив
Добрый день, мне нужно добавить пользователя в массив объектов и получить затем значения объекта по.
Добавление объекта в массив
Привет всем, у меня есть класс Пользователи в нем 3 поля(name, login, password ) мне нужно добавить.
Распечатать массив третьего объекта
Объявить класс, содержащий одномерный целочисленный массив размерностью 5, индексатор для работы с.
Массив в качестве параметра объекта
Доброго времени суток. Мне нужно создать объект Гость для ресторана. У него может быть имя, номер.
Как преобразовать объект в массив?
Как я могу преобразовать этот объект в массив? Я хотел бы вывести следующее:
ОТВЕТЫ
Ответ 1
Вы должны посмотреть get_object_vars, так как ваши свойства объявлены частными, вы должны вызвать это внутри класса и вернуть его результаты.
Будьте осторожны: для примитивных типов данных, таких как строки, он будет работать отлично, но я не знаю, как он ведет себя с вложенными объектами.
в вашем случае вы должны сделать что-то вроде:
Ответ 2
Одномерные массивы
Многомерные массивы
Несколько грязный метод заключается в том, чтобы использовать PHP >= 5.2 собственные функции JSON для кодирования JSON, а затем декодировать обратно в массив. Однако это не будет включать закрытых и защищенных членов.
В качестве альтернативы, следующая функция будет конвертировать из объекта в массив, включая частные и защищенные члены, взятые из здесь и измененные для использования кастинга:
Ответ 3
делает мелкое преобразование ($ object- > innerObject = new stdClass() остается объектом) и конвертирует назад и вперед, используя json works, но это не очень хорошая идея, если производительность является проблемой.
Если вам нужно, чтобы все объекты, которые нужно преобразовать в ассоциативные массивы, здесь лучший способ сделать это (код, из которого я не помню, где):
Ответ 4
Вы можете быстро преобразовать глубоко вложенные объекты в ассоциативные массивы, опираясь на поведение функций кодирования/декодирования JSON:
Ответ 5
Простая версия:
Обновленная рекурсивная версия:
Ответ 6
Я попробовал несколько способов сделать foreach с объектом, и ЭТО действительно самое легкое и крутое обходное решение, которое я видел. Только одна строка:)
Ответ 7
Ответ 8
У меня была та же проблема, и я решил ее с помощью get_object_vars, упомянутого выше.
Кроме того, мне пришлось преобразовать свой объект с json_decode, и мне пришлось перебирать массив с помощью oldschool для цикла (а не для каждого).
Ответ 9
Вы также можете использовать метод array_values () php
Ответ 10
Я столкнулся с проблемой с ответом Энди Эрншоу, потому что я включил эту функцию в отдельный класс в моем приложении «HelperFunctions», что означало, что рекурсивный вызов objectToArray() не удался.
Я преодолел это, указав имя класса в вызове array_map следующим образом:
Я бы написал это в комментариях, но пока у меня недостаточно репутации.
Конвертировать объект в массив php
Casting objects to arrays is a pain. Example:
$test = new MyClass ();
echo ‘
/*
Array
(
[MyClasspriv] => priv_value
[*prot] => prot_value
[pub] => pub_value
[MyClasspriv] => second_pub_value
)
*/
?>
Yes, that looks like an array with two keys with the same name and it looks like the protected field was prepended with an asterisk. But that’s not true:
/*
MyClasspriv (13) => priv_value
0 77 121 67 108 97 115 115 0 112 114 105 118
*prot (7) => prot_value
0 42 0 112 114 111 116
pub (3) => pub_value
112 117 98
MyClasspriv (11) => second_pub_value
77 121 67 108 97 115 115 112 114 105 118
*/
?>
The char codes show that the protected keys are prepended with ‘\0*\0’ and private keys are prepended with ‘\0’.__CLASS__.’\0′ so be careful when playing around with this.
The object casting methods presented here do not take into account the class hierarchy of the class you’re trying to cast your object into.
Value of uninitialized variable of different data types.
settype($a,’bool’);
var_dump($a); //boolean false
settype($b,’string’);
var_dump($b); //string » (length=0)
settype($c,’array’);
var_dump($c); //array (size=0) empty
settype($d,’int’);
var_dump($d); //int 0
settype($e,’float’);
var_dump($e); //float 0
You REALLY must be aware what you are doing, when you cast a lot in your code. For example, you can accidentaly change FALSE to TRUE (probably not in one line, like here):
if(TRUE === (boolean) (array) (int) FALSE) <
kaboom();
>
namaroulis stated «I found it tricky to check if a posted value was an integer»; to test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric():
in response to bhsmither at gmail.com
It raises a warning because of the bad enquoted variable
It seems (unset) is pretty useless. But for people who like to make their code really compact (and probably unreadable). You can use it to use an variable and unset it on the same line:
?>
With the unset cast:
?>
Hoorah, we lost another line!
Checking for strings to be integers?
How about if a string is a float?
/* When checking for floats, we assume the possibility of no decimals needed. If you MUST require decimals (forcing the user to type 7.0 for example) replace the sequence:
1+(\.2+)?
with
7+\.9+
*/