Mam problem z konwersją obiektu stdClass na tablicę. Próbowałem w ten sposób:
return (array) $booking;
lub
return (array) json_decode($booking,true);
lub
return (array) json_decode($booking);
Tablica przed rzutowaniem jest pełna jednym rekordem, po mojej próbie rzutowania jest pusta. Jak rzutować / konwertować bez usuwania wierszy?
tablica przed rzutowaniem:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
po rzuceniu jest pusty NULL, jeśli spróbuję zrobić var_dump($booking);
Próbowałem również tej funkcji, ale zawsze pusta:
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
. A bieganiejson_decode
po tablicy wydaje mi się dość desperackie, prawdopodobnie siedzi zbyt długo przed komputerem, a teraz jest czas na przerwę?var_dump($booking);
wynikiNULL
?var_dump()
przed castingiem. Nie używaj ponownie tej samej nazwy zmiennej btw. jeśli$booking
było coś przed castingiem, powinno to być coś przed castowaniem, a nie coś innego później. Różnicuj między zmiennymi wejściowymi i przetwarzającymi, w przeciwnym razie napotkasz problemy, których już nie rozumiesz.Odpowiedzi:
Leniwa sposób jedna wkładka
Możesz to zrobić w jednej linijce przy użyciu metod JSON, jeśli chcesz stracić odrobinę wydajności (choć niektórzy twierdzą, że jest szybszy niż iteracja po obiektach rekurencyjnie - najprawdopodobniej dlatego, że PHP powolnie wywołuje funkcje ). „ Ale ja już to zrobiłem ”, mówisz. Nie do końca - użyłeś
json_decode
tablicy, ale najpierw musisz ją zakodowaćjson_encode
.Wymagania
json_encode
Ijson_decode
metody. Są one automatycznie pakowane w PHP 5.2.0 i nowsze. Jeśli używasz dowolnej starszej wersji, istnieje również biblioteka PECL (która mówi, że w takim przypadku powinieneś naprawdę zaktualizować swoją instalację PHP. Obsługa 5.1 została zatrzymana w 2006 roku.)Konwertowanie
array
/stdClass
->stdClass
Konwertowanie
array
/stdClass
->array
Podręcznik określa drugi argument
json_decode
jako:Dlatego następujący wiersz przekształci cały obiekt w tablicę:
źródło
(array) $booking;
wvar_dump
jestNULL
(jak napisane przez OP), zgadnij, co ten kod zwróci?NULL
po rzuceniu go jako tablicę. Myślę, że OP oznacza, że jestNULL
po użyciu,json_decode($array)
co ma sens zgodnie z instrukcją .json_decode()
w tablicy.json_decode
powinien być używany w ciągu JSON. Dlatego, jeśli najpierw zakodujemy go jako ciąg JSON (json_encode
), a następnie zdekodujemy (używając naszego ciągu JSON), to będzie działał dobrze.użyj tej funkcji, aby uzyskać standardową tablicę typu, którego szukasz ...
źródło
Ponieważ jest to tablica przed jej rzutowaniem, rzutowanie nie ma sensu.
Być może potrzebujesz rekurencyjnej obsady, która wyglądałaby mniej więcej tak:
Stosowanie:
Wynik przed:
Wynik po:
Uwaga:
Testowany i działający ze złożonymi tablicami, w których obiekt stdClass może zawierać inne obiekty stdClass.
źródło
Użyj poniższej funkcji php do konwersji phd stdClass na tablicę
źródło
Ta funkcja działała dla mnie:
Odniesienie: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
źródło
Skorzystaj z wbudowanej funkcji rzutowania typu, po prostu pisz
źródło
Po prostu google go i znalazłem tutaj przydatną funkcję, która jest przydatna do konwersji obiektu stdClass na tablicę rekurencyjnie.
EDYCJA : Zaktualizowałem tę odpowiedź treściami z połączonego źródła (które również zostało zmienione), dzięki mason81 za sugestie.
źródło
Oto wersja odpowiedzi Carlo, którą można wykorzystać w klasie:
źródło
Poniższy kod przeczyta wszystkie e-maile i wydrukuje temat, treść i datę.
To powoduje, że:
Po zmaganiu się z różnymi sugestiami skorzystałem z metody prób i błędów, aby znaleźć to rozwiązanie. Mam nadzieję, że to pomoże.
źródło
Oto najlepsza funkcja Object to Array, jaką mam - działa rekurencyjnie:
$ clean_array = object_to_array ($ object_data_here);
źródło