Tippe es einfach
$array = (array) $yourObject;
Von Arrays :
Wenn ein Objekt in ein Array konvertiert wird, ist das Ergebnis ein Array, dessen Elemente die Eigenschaften des Objekts sind. Die Schlüssel sind die Namen der Mitgliedsvariablen, mit einigen bemerkenswerten Ausnahmen: Auf Integer-Eigenschaften kann nicht zugegriffen werden. Bei privaten Variablen wird dem Klassennamen der Klassenname vorangestellt. Geschützte Variablen haben ein '*' vor dem Variablennamen. Diese vorangestellten Werte haben auf beiden Seiten Null-Bytes.
Beispiel: Einfaches Objekt
$object = new StdClass;
$object->foo = 1;
$object->bar = 2;
var_dump( (array) $object );
Ausgabe:
array(2) {
'foo' => int(1)
'bar' => int(2)
}
Beispiel: Komplexes Objekt
class Foo
{
private $foo;
protected $bar;
public $baz;
public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}
}
var_dump( (array) new Foo );
Ausgabe (aus Gründen der Übersichtlichkeit mit \ 0s bearbeitet):
array(3) {
'\0Foo\0foo' => int(1)
'\0*\0bar' => int(2)
'baz' => class stdClass#2 (0) {}
}
Ausgabe mit var_export
statt var_dump
:
array (
'' . "\0" . 'Foo' . "\0" . 'foo' => 1,
'' . "\0" . '*' . "\0" . 'bar' => 2,
'baz' =>
stdClass::__set_state(array(
)),
)
Wenn Sie auf diese Weise typisieren, wird das Objektdiagramm nicht tiefgreifend umgewandelt, und Sie müssen die Nullbytes (wie im manuellen Anführungszeichen erläutert) anwenden, um auf nicht öffentliche Attribute zuzugreifen. Dies funktioniert also am besten, wenn StdClass-Objekte oder Objekte mit nur öffentlichen Eigenschaften umgewandelt werden. Für schnell und schmutzig (was Sie gefragt haben) ist es in Ordnung.
Siehe auch diesen ausführlichen Blog-Beitrag:
ArrayAccess
Schnittstelle, möglicherweise in Kombination mit dieser Lösung. php.net/manual/en/class.arrayaccess.php[1 => "one"]
wird["1" => "one"]
(array)
und(object)
funktioniert zuverlässig und gleich in allen Versionen seit PHP 4.3. Siehe 3v4l.org/X6lhm . Wenn Sie einen Syntaxfehler erhalten, haben Sie etwas falsch gemacht.empty
. Sie können keinen Ausdruck mitempty
vor 5.5 verwenden. Dies hat nichts mit Typografie zu tun;)Sie können tief verschachtelte Objekte schnell in assoziative Arrays konvertieren, indem Sie sich auf das Verhalten der JSON-Codierungs- / Decodierungsfunktionen verlassen:
quelle
Ab dem ersten Google-Treffer für " PHP-Objekt zu Assoc-Array " haben wir Folgendes :
Die Quelle ist auf Codesnippets.joyent.com .
quelle
function objectToArray($o) { $a = array(); foreach ($o as $k => $v) $a[$k] = (is_array($v) || is_object($v)) ? objectToArray($v): $v; return $a; }
Dies setzt nur alles, was kein Objekt oder Array ist, und fährt ohne wiederholten Rückruf der Methode fort, sofern dies nicht erforderlich ist.Wenn Ihre Objekteigenschaften öffentlich sind, können Sie Folgendes tun:
Wenn sie privat oder geschützt sind, haben sie seltsame Schlüsselnamen im Array. In diesem Fall benötigen Sie also die folgende Funktion:
quelle
Ausgabe
quelle
Hier ist ein Code:
quelle
Alle anderen hier veröffentlichten Antworten funktionieren nur mit öffentlichen Attributen. Hier ist eine Lösung, die mit JavaBeans- ähnlichen Objekten unter Verwendung von Reflektion und Gettern funktioniert :
quelle
public
Eigenschaften?Was ist mit
get_object_vars($obj)
? Es erscheint nützlich, wenn Sie nur auf die öffentlichen Eigenschaften eines Objekts zugreifen möchten.Siehe get_object_vars .
quelle
Geben Sie cast your object in ein Array ein.
Es wird Ihr Problem lösen.
quelle
Wenn Sie ein Array von einem Objekt benötigen, sollten Sie die Daten wahrscheinlich zuerst als Array zusammenstellen. Denk darüber nach.
Verwenden Sie keine
foreach
Anweisung oder JSON-Transformationen. Wenn Sie dies planen, arbeiten Sie wieder mit einer Datenstruktur, nicht mit einem Objekt.Wenn Sie es wirklich brauchen, verwenden Sie einen objektorientierten Ansatz, um einen sauberen und wartbaren Code zu haben. Zum Beispiel:
Objekt als Array
Wenn Sie alle Eigenschaften benötigen, verwenden Sie ein Übertragungsobjekt:
quelle
Mit dieser Funktion können Sie ganz einfach das Ergebnis erhalten:
Verwenden Sie PHP 5 oder höher.
quelle
Hier ist meine rekursive PHP-Funktion zum Konvertieren von PHP-Objekten in ein assoziatives Array:
Anwendungsbeispiel:
quelle
$new_arr1 = (array) $my_object;
Um ein Objekt in ein Array zu konvertieren, wandeln Sie es einfach explizit um:
quelle
Sie können auch eine Funktion in PHP erstellen, um ein Objektarray zu konvertieren:
quelle
Möglicherweise möchten Sie dies tun, wenn Sie Daten als Objekte aus Datenbanken abrufen:
quelle
Benutzerdefinierte Funktion zum Konvertieren von stdClass in ein Array:
Eine weitere benutzerdefinierte Funktion zum Konvertieren von Arrays in stdClass:
Anwendungsbeispiel:
quelle
Verwenden:
Es gibt ein Array ohne Sonderzeichen und Klassennamen zurück.
quelle
Diese Antwort ist nur die Vereinigung der verschiedenen Antworten dieses Beitrags, aber es ist die Lösung, ein PHP-Objekt mit öffentlichen oder privaten Eigenschaften mit einfachen Werten oder Arrays in ein assoziatives Array zu konvertieren ...
quelle
Einige Verbesserungen am "bekannten" Code
Beachten Sie, dass , wenn die Funktion Mitglied einer Klasse ist (wie oben) Sie ändern müssen ,
__FUNCTION__
um__METHOD__
quelle
Sie können auch die Symfony Serializer-Komponente verwenden
quelle
Für Ihren Fall war es richtig / schön, wenn Sie die Muster "Dekorator" oder "Datumsmodelltransformation" verwenden würden. Zum Beispiel:
Dein Modell
Dekorateur
Verwendungszweck
Es wird also schöner und korrekter Code.
quelle
Lästige Sterne umwandeln und entfernen:
Wahrscheinlich ist es billiger als die Verwendung von Reflexionen.
quelle
Kurze Lösung von @ SpYk3HH
quelle
Da viele Leute diese Frage finden, weil sie Probleme mit dem dynamischen Zugriff auf Attribute eines Objekts haben, möchte ich nur darauf hinweisen, dass Sie dies in PHP tun können:
$valueRow->{"valueName"}
Im Kontext (HTML-Ausgabe zur besseren Lesbarkeit entfernt):
quelle
Mit Typecasting können Sie Ihr Problem lösen. Fügen Sie Ihrem Rückgabeobjekt einfach die folgenden Zeilen hinzu:
Sie können ihm auch ein neues Schlüssel- und Wertepaar hinzufügen, indem Sie Folgendes verwenden:
quelle
Ich denke, es ist eine gute Idee, Merkmale zu verwenden, um die Konvertierungslogik von Objekt zu Array zu speichern. Ein einfaches Beispiel:
quelle
quelle
Hier habe ich eine objectToArray () -Methode erstellt, die auch mit rekursiven Objekten funktioniert, z. B. wenn
$objectA
enthält, auf$objectB
welche Punkte erneut verwiesen wird$objectA
.Außerdem habe ich die Ausgabe mit ReflectionClass auf öffentliche Eigenschaften beschränkt. Werde es los, wenn du es nicht brauchst.
Um bereits verwendete Objekte zu identifizieren, verwende ich eine geschützte Eigenschaft in dieser (abstrakten) Klasse mit dem Namen
$this->usedObjects
. Wenn ein rekursiv verschachteltes Objekt gefunden wird, wird es durch die Zeichenfolge ersetzt**recursive**
. Andernfalls würde es wegen der Endlosschleife fehlschlagen.quelle
$usedObjects
wird zu Beginn nicht initialisiert, daher führt ein mehrmaliger Aufruf zu falschen Ergebnissen bei späteren Aufrufen. Außerdem geben Sie es am Ende nicht frei, sodass Ihre Objekte niemals aus dem Speicher entfernt werden.Es gibt meinen Vorschlag, wenn Sie Objekte in Objekten mit sogar privaten Mitgliedern haben:
quelle
Ich benutze dies (benötigte rekursive Lösung mit richtigen Schlüsseln):
Anwendungsbeispiel, folgender Code:
Wird dies drucken:
quelle