Wie man ein PHP-Objekt in ein assoziatives Array umwandelt: 3 funktionierende Methoden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Vom Objekt zum Array: Warum das nötig ist und wie man Fallstricke vermeidet

\n\n

Jeder PHP-Entwickler steht früher oder später vor der Aufgabe: Es gibt ein Objekt (z. B. aus einer API, Datenbank oder Bibliothek), aber benötigt wird ein einfaches assoziatives Array. Scheinbar eine elementare Operation, aber der Teufel steckt, wie immer, im Detail. Eine falsche Umwandlung kann zu Datenverlust, unerwarteten Typen oder fatalen Fehlern führen.

\n\n

In diesem Artikel betrachten wir drei grundlegende Ansätze zur Konvertierung eines PHP-Objekts in ein assoziatives Array, vergleichen ihre Leistung, Verarbeitungstiefe und Fallstricke. Sie erfahren, welche Methode für 90% der Aufgaben geeignet ist und welche Sie besser für Laborexperimente aufheben sollten. Los geht's!

\n\n

Methode 1: Magischer Typcast (array)

\n\n

Der offensichtlichste und prägnanteste Weg ist die Verwendung des Typcasts: (array) $object. Diese Methode ist in PHP integriert und funktioniert "out of the box". Sehen wir uns ein Beispiel an.

\n\n
<?php\n$user = new stdClass();\n$user->name = 'Alexei';\n$user->age = 28;\n$user->email = 'alex@example.com';\n\n$array = (array) $user;\nprint_r($array);\n?>
\n\n

Ergebnis:

\n\n
Array\n(\n    [name] => Alexei\n    [age] => 28\n    [email] => alex@example.com\n)
\n\n

Sieht perfekt aus? Fast. Aber es gibt Nuancen.

\n\n

Vorteile der Methode (array)

\n
    \n
  • Einfachheit und Geschwindigkeit — eine Operation, keine Schleifen.
  • \n
  • Funktioniert mit beliebigen Objekten, einschließlich Instanzen benutzerdefinierter Klassen.
  • \n
  • Behält öffentliche Eigenschaften des Objekts bei.
  • \n
\n\n

Nachteile und Fallstricke

\n
    \n
  • Nicht rekursiv — wenn eine Eigenschaft des Objekts selbst ein Objekt ist, wird es nicht in ein Array umgewandelt. Sie erhalten ein verschachteltes Objekt innerhalb des Arrays.
  • \n
  • Problem mit privaten/geschützten Eigenschaften — sie gelangen in das Array, jedoch mit Namen, die Nullzeichen (\\0) enthalten. Dies zerstört die Serialisierung.
  • \n
  • Änderung der Schlüssel — bei eingebauten Klassen (DateTime, PDOStatement) kann das Verhalten unvorhersehbar sein.
  • \n
\n\n

Beispiel für ein Problem mit einer privaten Eigenschaft:

\n\n
<?php\nclass User {\n    public $name = 'Ivan';\n    private $password = 'secret123';\n}\n\n$user = new User();\n$array = (array) $user;\nvar_dump(array_keys($array));\n// Gibt aus: array(2) { [0]=> string(4) "name" [1]=> string(17) "\\0User\\0password" }\n?>
\n\n

Wie Sie sehen, ist der Schlüssel \\0User\\0password nicht das, was Sie in Ihrem Code sehen möchten.

\n\n

Methode 2: JSON-Brücke (json_decode + json_encode)

\n\n

Der zweite beliebte Ansatz besteht darin, das Objekt zuerst in JSON zu serialisieren und dann wieder in ein Array zu dekodieren. Dies löst das Problem der Rekursion und privater Eigenschaften, fügt aber zusätzlichen Overhead hinzu.

\n\n
<?php\n$object = new stdClass();\n$object->name = 'Maria';\n$object->skills = ['PHP', 'JavaScript', 'Python'];\n\n$array = json_decode(json_encode($object), true);\nprint_r($array);\n?>
\n\n

Ergebnis:

\n\n
Array\n(\n    [name] => Maria\n    [skills] => Array\n        (\n            [0] => PHP\n            [1] => JavaScript\n            [2] => Python\n        )\n)
\n\n

Jetzt ist das verschachtelte Array skills ebenfalls ein Array und kein Objekt. Ausgezeichnet!

\n\n

Wann diese Methode hilft

\n
    \n
  • Tief verschachtelte Strukturen — Rekursion wird automatisch verarbeitet.
  • \n
  • Datenreinheit — keine Sonderzeichen in den Schlüsseln.
  • \n
  • Kompatibilität — wenn Sie bereits mit JSON arbeiten (API, Datenbanken), ist dies die natürliche Wahl.
  • \n
\n\n

Nachteile des JSON-Ansatzes

\n
    \n
  • Typverlust — Ganzzahlen bleiben ganzzahlig, aber Objekte wie DateTime werden in Zeichenketten umgewandelt. Objekte mit Methoden verlieren ihr Verhalten.
  • \n

Blogs

Buchempfehlungen