У меня проблема с преобразованием объекта stdClass в массив. Я пытался таким образом:
return (array) $booking;
или
return (array) json_decode($booking,true);
или
return (array) json_decode($booking);
Массив до приведения заполнен одной записью, после моей попытки приведения он пустой. Как преобразовать / преобразовать его без удаления его строк?
массив перед приведением:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
после литья пусто NULL, если я пытаюсь сделать var_dump($booking);
Я также пробовал эту функцию, но всегда пустой:
public function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
return
. А работатьjson_decode
с массивом мне кажется довольно отчаянным, вероятно, слишком долго сидеть перед компьютером, и теперь пришло время сделать перерыв?var_dump($booking);
выходыNULL
?var_dump()
перед кастингом. Не используйте повторно одно и то же имя переменной. если$booking
что-то было до кастинга, то все равно должно быть что-то до кастинга, а не что-то другое после. Различие между входными и обрабатывающими переменными, иначе вы столкнетесь с проблемами, которые вы больше не понимаете, что вы там делаете.Ответы:
Ленивый метод один вкладыша
Вы можете сделать это за один прием, используя методы JSON, если вы хотите потерять чуть-чуть производительности (хотя некоторые сообщают, что это быстрее, чем рекурсивный просмотр объектов - скорее всего, из-за того, что PHP медленно вызывает функции ). « Но я уже сделал это », - говорите вы. Не совсем - вы использовали
json_decode
в массиве, но вам нужноjson_encode
сначала закодировать его .Требования
json_encode
Иjson_decode
методы. Они автоматически связаны в PHP 5.2.0 и выше. Если вы используете любую более старую версию, есть также библиотека PECL (в этом случае вам действительно нужно обновить установку PHP. Поддержка 5.1 прекратилась в 2006 году.)Преобразование
array
/stdClass
->stdClass
Преобразование
array
/stdClass
->array
В руководстве указан второй аргумент
json_decode
:Следовательно, следующая строка преобразует весь ваш объект в массив:
источник
(array) $booking;
в avar_dump
естьNULL
(как написано OP), угадайте, что этот код вернет?NULL
после того, как он был преобразован в массив. Я думаю, что OP означает, что этоNULL
после использования,json_decode($array)
что имеет смысл в соответствии с руководством . NULL возвращается, если json не может быть декодированjson_decode()
массив.json_decode
должен использоваться в строке JSON. Поэтому, если мы сначала закодируем его в виде строки JSON (json_encode
), а затем декодируем (используя нашу строку JSON), то он работает нормально.используйте эту функцию, чтобы получить стандартный массив того типа, который вы хотите после ...
источник
Поскольку это массив перед тем, как вы его разыгрываете, разыгрывать его не имеет смысла.
Вы можете захотеть рекурсивное приведение, которое будет выглядеть примерно так:
Использование:
Результат до:
Результат после:
Примечание:
Протестировано и работает со сложными массивами, где объект stdClass может содержать другие объекты stdClass.
источник
Пожалуйста, используйте следующую функцию php для преобразования php stdClass в массив
источник
Эта функция работает для меня:
Ссылка: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
источник
Используйте встроенную функцию приведения типов, просто введите
источник
Просто погуглил и нашел здесь удобную функцию, которая полезна для рекурсивного преобразования объекта stdClass в массив.
РЕДАКТИРОВАТЬ : я обновил этот ответ с содержанием из связанного источника (который также изменился сейчас), спасибо mason81 за предложение мне.
источник
Вот вариант ответа Карло, который можно использовать в классе:
источник
Следующий код прочитает все электронные письма и напечатает тему, текст и дату.
Это выводит следующее:
Поработав с различными предложениями, я использовал метод проб и ошибок, чтобы придумать это решение. Надеюсь, поможет.
источник
Вот лучшая у меня функция Object to Array - работает рекурсивно:
$ clean_array = object_to_array ($ object_data_here);
источник