Ich habe ein Problem beim Konvertieren eines Objekts stdClass in ein Array. Ich habe es so versucht:
return (array) $booking;
oder
return (array) json_decode($booking,true);
oder
return (array) json_decode($booking);
Das Array vor der Besetzung ist mit einem Datensatz voll, nach meinem Versuch, es zu besetzen, ist es leer. Wie kann man es umwandeln / konvertieren, ohne seine Zeilen zu löschen?
Array vor der Besetzung:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
nach der Besetzung ist leer NULL, wenn ich versuche, eine zu machen var_dump($booking);
Ich habe diese Funktion auch ausprobiert, aber immer leer:
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
. Undjson_decode
auf einem Array zu laufen scheint mir ziemlich verzweifelt, wahrscheinlich zu lange vor dem Computer zu sitzen und es ist jetzt Zeit, eine Pause zu machen?var_dump($booking);
AusgängeNULL
?var_dump()
vor dem Casting darum gebeten . Verwenden Sie übrigens nicht denselben Variablennamen erneut. Wenn$booking
es etwas vor dem Casting war, sollte es immer noch etwas vor dem Casting sein und nicht etwas anderes danach. Unterscheiden Sie zwischen Eingabe- und Verarbeitungsvariablen, da sonst Probleme auftreten, die Sie nicht mehr verstehen, was Sie dort tun.Antworten:
Die faule Einzeiler-Methode
Sie können dies in einem Einzeiler mithilfe der JSON-Methoden tun, wenn Sie bereit sind, ein wenig an Leistung zu verlieren (obwohl einige angegeben haben, dass dies schneller ist als das rekursive Durchlaufen der Objekte - höchstwahrscheinlich, weil PHP Funktionen nur langsam aufruft ). " Aber das habe ich schon gemacht ", sagst du. Nicht genau - Sie haben
json_decode
das Array verwendet, aber Sie müssen esjson_encode
zuerst mit codieren .Bedarf
Die
json_encode
undjson_decode
Methoden. Diese werden automatisch in PHP 5.2.0 und höher gebündelt. Wenn Sie eine ältere Version verwenden, gibt es auch eine PECL-Bibliothek (in diesem Fall sollten Sie Ihre PHP-Installation wirklich aktualisieren. Die Unterstützung für 5.1 wurde 2006 eingestellt.)Konvertieren eines
array
/stdClass
->stdClass
Konvertieren eines
array
/stdClass
->array
Das Handbuch gibt das zweite Argument an
json_decode
als:Daher konvertiert die folgende Zeile Ihr gesamtes Objekt in ein Array:
quelle
(array) $booking;
in avar_dump
isNULL
(wie von OP geschrieben), raten Sie mal, was dieser Code zurückgibt?NULL
nach dem Casting als Array ist. Ich denke, OP bedeutet, dass esNULL
nach der Verwendung ist,json_decode($array)
was laut Handbuch sinnvoll ist . NULL wird zurückgegeben, wenn derjson_decode()
auf einem Array verwendet haben.json_decode
sollte für eine JSON-Zeichenfolge verwendet werden. Wenn wir es daher zuerst als JSON-Zeichenfolge (json_encode
) codieren und dann (mithilfe unserer JSON-Zeichenfolge) dekodieren, funktioniert es einwandfrei.Verwenden Sie diese Funktion, um ein Standardarray des gewünschten Typs wiederherzustellen ...
quelle
Da es sich um ein Array handelt, bevor Sie es umsetzen, macht das Umwandeln keinen Sinn.
Möglicherweise möchten Sie eine rekursive Besetzung, die ungefähr so aussieht:
Verwendung:
Ergebnis vor:
Ergebnis nach:
Hinweis:
Getestet und Arbeiten mit komplexen Arrays, in denen ein stdClass-Objekt andere stdClass-Objekte enthalten kann.
quelle
Bitte verwenden Sie die folgende PHP-Funktion, um PHP stdClass in Array zu konvertieren
quelle
Diese Funktion hat bei mir funktioniert:
Referenz: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
quelle
Verwenden Sie die integrierte Typumwandlungsfunktion, geben Sie einfach ein
quelle
Ich habe es einfach gegoogelt und hier eine praktische Funktion gefunden, die nützlich ist, um das stdClass-Objekt rekursiv in ein Array zu konvertieren.
BEARBEITEN : Ich habe diese Antwort mit Inhalten aus der verknüpften Quelle aktualisiert (die jetzt ebenfalls geändert wird), danke an mason81 für den Vorschlag.
quelle
Hier ist eine Version von Carlos Antwort, die in einer Klasse verwendet werden kann:
quelle
Der folgende Code liest alle E-Mails und druckt den Betreff, den Text und das Datum aus.
Dies gibt Folgendes aus:
Nachdem ich mit verschiedenen Vorschlägen zu kämpfen hatte, habe ich Trial & Error verwendet, um diese Lösung zu finden. Ich hoffe es hilft.
quelle
Hier ist die beste Objekt-zu-Array-Funktion, die ich habe - funktioniert rekursiv:
$ clean_array = object_to_array ($ object_data_here);
quelle