Ein mehrdimensionales Array ist ein Array, dessen Elemente Arrays sind. Du liest es mit einem Klammerpaar pro Ebene: $grid[1][2] ist Zeile 1, Spalte 2, und $users[0]['name'] ist der Name im ersten Datensatz.
Die zweite Form, eine Liste von Datensätzen mit benannten Feldern, begegnet dir am häufigsten: Das liefert dir meist eine Datenbankabfrage, eine dekodierte JSON-Antwort oder eine eingelesene CSV-Datei. Jeder Datensatz ist ein assoziatives Array.
Verschachtelte Arrays erstellen
Die Verschachtelung kann so tief gehen, wie du brauchst, und die Ebenen können numerische und String-Schlüssel mischen. Ein Konfigurations-Array ist ein typisches Beispiel: benannte Abschnitte, die jeweils Einstellungen oder Listen enthalten.
Zeilen und verschachtelte Werte hinzufügen
$rows[] = [...] hängt eine ganze Zeile an. $arr['key'][] = $value hängt in einer verschachtelten Liste an, und PHP erzeugt das innere Array beim ersten Mal, also braucht das Gruppieren von Werten keine Vorbereitung.
Ein mehrdimensionales Array durchlaufen
Verwende ein foreach pro Ebene. Bei einer Liste von Datensätzen reicht meist eine Schleife, weil du die Felder über ihren Namen liest. Bei einem Raster läuft die innere Schleife über die Zellen jeder Zeile.
Eine HTML-Tabelle aus einem Array bauen
Ein Array von Zeilen passt direkt auf eine HTML-Tabelle: Die Schlüssel der ersten Zeile werden zur Kopfzeile, und jede Zeile wird zu einem <tr>. Führe es aus, und der Tab Page zeigt die gerenderte Tabelle; ändere einen Wert oder füge eine Zeile hinzu und führe es erneut aus.
Die Form foreach (...): ... endforeach; ist dieselbe Schleife, für Templates geschrieben, damit das HTML lesbar bleibt.
Eine Spalte aus allen Zeilen holen
array_column() zieht ein Feld aus jeder Zeile in eine flache Liste. Übergib ein drittes Argument, um das Ergebnis nach einem anderen Feld zu schlüsseln, und aus einer Liste von Datensätzen wird eine Nachschlagetabelle.
Zeilen nach einem Feld sortieren
usort() sortiert die Zeilen mit einer Vergleichsfunktion. Der Spaceship-Operator <=> liefert -1, 0 oder 1, genau das, was usort() erwartet. Vertausche $a und $b, um absteigend zu sortieren.
count($players, COUNT_RECURSIVE) zählt die 3 Zeilen plus die 6 Felder darin, deshalb gibt es 9 aus.
Typischer Fehler: einen tiefen Schlüssel lesen, der fehlen könnte
$config['cache']['ttl'] zu lesen, wenn es keinen Schlüssel cache gibt, gibt Warning: Undefined array key "cache" aus, gefolgt von Warning: Trying to access array offset on null für die nächste Ebene. Der Operator ?? prüft die ganze Kette auf einmal und warnt nie, ist also der sichere Weg, optionale verschachtelte Werte zu lesen.
Häufig gestellte Fragen
Wie greife ich in PHP auf einen Wert in einem mehrdimensionalen Array zu?
Füge pro Ebene ein Klammerpaar hinzu: $matrix[1][0] ist Zeile 1, Spalte 0, und $users[0]['email'] ist die E-Mail des ersten Nutzers. Jede Klammer liest aus dem Array, das die vorherige geliefert hat.
Wie durchlaufe ich in PHP ein mehrdimensionales Array?
Verschachtle ein foreach pro Ebene: foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }. Bei einem Array von Datensätzen brauchst du meist nur eine Schleife und liest die Felder über ihren Namen: $row['name'].
Wie füge ich einem mehrdimensionalen Array ein Element hinzu?
Häng eine ganze Zeile mit $rows[] = ['name' => 'Linus', 'age' => 54]; an oder häng mit $groups['admins'][] = 'Grace'; in ein verschachteltes Array an. PHP erzeugt das innere Array, wenn der Schlüssel noch nicht existiert.
Wie erstelle ich in PHP ein 2D-Array voller Nullen?
Verschachtle zwei Aufrufe von array_fill(): $grid = array_fill(0, 3, array_fill(0, 4, 0)); ergibt 3 Zeilen mit je 4 Nullen. Jede Zeile ist eine eigene Kopie, also ändert $grid[0][0] = 5; nur die erste Zeile.