Php преобразовать объект в массив

Преобразовать массив в объект можно при помощи приведения его к типу object . После преобразования массива в тип object , будет создан новый экземпляр встроенного класса stdClass.

Преобразование в объект

Например есть ассоциативный массив, который нужно преобразовать в объект.

В результате std >stdClass Object ( [0] => Вселенная (Universe) [galaxy] => Млечный путь (Milky way) [planetary-system] => Солнечная система (Solar system) [planet] => Земля (Earth) [continent] => Европа (Europe) [country] => Россия (Russia) [city] => Москва (Moscow) )

Обращение к членам объекта

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

Переменное имя свойства

Если ключ элемента содержал другие символы, например дефис (-), то получить значение можно при помощи переменного имени свойства.

Числовые ключи

Если ключ элемента был числовым, то получить значение из объекта можно только при помощи итераций foreach

Результат

Категории

Читайте также

Комментарии

А вот тут описан обратный вариант Преобразование объекта PHP в ассоциативный массив
http://q-answer.ru/questions/preobrazovanie-ob-ekta-php-v-associativnyy-massiv-36689.html

Введите данные указанные при регистрации:

Социальные сети

Вы можете быстро войти через социальные сети:

Читайте также:  Excel функция текст форматы

Как я могу преобразовать этот объект в массив? Я хотел бы вывести следующее:

Возможно ли это?

11 ответов

110 Решение Benoit [2010-03-19 15:23:00]

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

Будьте осторожны: для примитивных типов данных, таких как строки, он будет работать отлично, но я не знаю, как он ведет себя с вложенными объектами.

в вашем случае вы должны сделать что-то вроде:

331 Andy E [2010-03-19 14:54:00]

Одномерные массивы

Для преобразования одномерных массивов вы можете использовать с помощью (array) или get_object_vars , которые Бенуа упомянул в его ответ.

Они немного отличаются друг от друга. Например, get_object_vars возвращает массив с только общедоступными свойствами, если он не вызван из области объекта, который вы передаете (т.е. В функции-члена объекта). (array) , с другой стороны, будет передан массиву со всеми публичными, частными и защищенными членами, неповрежденными в массиве, хотя, конечно, все публично.

Многомерные массивы

Несколько грязный метод заключается в том, чтобы использовать PHP >= 5.2 собственные функции JSON для кодирования JSON, а затем декодировать обратно в массив. Однако это не будет включать закрытых и защищенных членов.

В качестве альтернативы, следующая функция будет конвертировать из объекта в массив, включая частные и защищенные члены, взятые из здесь и измененные для использования кастинга:

32 Sergio [2012-07-20 13:26:00]

делает мелкое преобразование ($ object- > innerObject = new stdClass() остается объектом) и конвертирует назад и вперед, используя json works, но это не очень хорошая идея, если производительность является проблемой.

Если вам нужно, чтобы все объекты, которые нужно преобразовать в ассоциативные массивы, здесь лучший способ сделать это (код, из которого я не помню, где):

Читайте также:  Что можно заряжать внешним аккумулятором

28 Mufaddal [2013-07-18 12:27:00]

Вы можете быстро преобразовать глубоко вложенные объекты в ассоциативные массивы, опираясь на поведение функций кодирования/декодирования JSON:

16 Styx [2014-06-08 15:27:00]

Простая версия:

Обновленная рекурсивная версия:

15 erm3nda [2013-09-10 06:29:00]

Я попробовал несколько способов сделать foreach с объектом, и ЭТО действительно самое легкое и крутое обходное решение, которое я видел. Только одна строка:)

0 kunal [2017-11-15 10:38:00]

У меня была та же проблема, и я решил ее с помощью get_object_vars, упомянутого выше.

Кроме того, мне пришлось преобразовать свой объект с json_decode, и мне пришлось перебирать массив с помощью oldschool для цикла (а не для каждого).

Я столкнулся с проблемой с ответом Энди Эрншоу, потому что я включил эту функцию в отдельный класс в моем приложении "HelperFunctions", что означало, что рекурсивный вызов objectToArray() не удался.

Я преодолел это, указав имя класса в вызове array_map следующим образом:

Я бы написал это в комментариях, но пока у меня недостаточно репутации.

Я хочу преобразовать мой объект класса в массив. Я уже задавал вопрос о том, как преобразовать объект в массив.

Но при этом мне было интересно, можем ли мы сделать что-то вроде этого:

$ arrObj = (массив) $ objectOfMyClass;

Как я знаю, он преобразует объект в массив, но если есть какая-то определенная пользователем функция, в которой я могу управлять этим поведением и позволить нескольким членам передаваться в качестве ключей массива.

Например, скажем, у меня есть класс:

Выход:

Но я не хочу этот вывод, я хочу изменить этот вывод и хочу вывод, как это:

Таким образом, должен быть какой-то способ, которым я мог бы вызывать пользовательскую функцию, когда кто-то пытался type cast мои объекты класса, как это:

Читайте также:  Xy y xtg y x

Когда кто-то использует следующее утверждение:

Это должно ссылаться __toArray метод. Такой же как __toString ,

Если кто-нибудь знает какие-либо способы сделать что-то подобное, пожалуйста, помогите мне.

Если есть какие-либо другие решения, которые могут привести к тому же результату, было бы очень полезно.

Решение

К сожалению, нет волшебного эквивалента __toString для преобразования массива. Там было несколько предложений, чтобы добавить его на протяжении многих лет, а также аналогичные __toBool , __toFloat методы, но ни один из них не достиг большого прогресса (например, https://wiki.php.net/rfc/object_cast_to_types )

Объекты поддерживают реализацию ArrayAccess интерфейс, который обрабатывает их как массивы другими способами, но не предоставляет метод для полного приведения.

Есть несколько доступных решений:

get_object_vars

Как уже упоминалось, публичные свойства могут быть преобразованы только с помощью get_object_vars метод, например

JsonSerializable

Интерфейс JsonSerializable позволяет применять пользовательскую логику к тому, что происходит, когда json_encode называется, что дает улучшение в том смысле, что позволяет включать частные или защищенные свойства или любую другую пользовательскую логику, которая у вас есть.

json_decode а также json_encode вызовы в вышеупомянутом могут, конечно, быть обернуты в некоторый простой синтаксический сахар, такой как

Однако все это не позволяет вам переопределить то, что происходит, когда вы используете само приведение массива. Надеемся, что однажды одно из предложений будет принято, но до тех пор это будут лучшие варианты.

Другие решения

использование json_decode() а также json_encode() преобразовать объект php в массив