list()
Die Funktion list() in PHP weist Variablen in einer Operation Werte zu. Sie wird häufig verwendet, um Werte aus einem Array zu extrahieren.
Einführung
list() ist ein PHP-Sprachkonstrukt (keine Funktion), das ein Array destrukturiert und dabei jedes seiner Elemente in einer einzigen Anweisung einer separaten Variable zuweist. Anstatt Werte einzeln über Indizes auszulesen, beschreibt man die Form des Arrays auf der linken Seite und lässt PHP die Variablen befüllen.
Diese Seite behandelt die grundlegende Syntax, die moderne Kurzform [], das Überspringen und Verschachteln von Elementen, die Form mit assoziativen Schlüsseln (PHP 7.1+) sowie häufige Fallstricke. list() ist am nützlichsten, wenn eine Funktion oder ein Ausdruck bereits ein PHP-Array zurückgibt und man dessen Teile benennen möchte.
Grundlegende Syntax
Die grundlegende Syntax des list()-Konstrukts lautet wie folgt:
Die PHP-Syntax von list()
list($var1, $var2, $var3) = $array;Das $array auf der rechten Seite liefert die Werte. Das Konstrukt weist sie den Variablen auf der linken Seite nach Position zu — Element 0 geht an $var1, Element 1 an $var2 und so weiter.
Kurze Array-Syntax []
Seit PHP 7.1 können eckige Klammern anstelle des Schlüsselworts list() verwendet werden. Die beiden Formen sind äquivalent — die Kurzform ist mittlerweile der gängigere Stil:
<?php
$point = [10, 20];
[$x, $y] = $point; // same as list($x, $y) = $point;
echo "$x, $y"; // Output: 10, 20Verwendungsbeispiel
Hier ist ein Beispiel, wie das list()-Konstrukt in PHP eingesetzt werden kann:
Beispiel für PHP list()
In diesem Beispiel weist das list()-Konstrukt die Werte des $fruits-Arrays den Variablen $fruit1, $fruit2 und $fruit3 zu. Der Wert jeder Variable wird anschließend auf dem Bildschirm ausgegeben.
Elemente überspringen
Nicht benötigte Werte können ignoriert werden, indem der entsprechende Platz leer gelassen wird. Nur die benannten Elemente werden zugewiesen:
<?php
$data = ['red', 'green', 'blue', 'yellow'];
// Grab only the third element; skip the rest
list(, , $third) = $data;
echo $third; // Output: blueDie beiden führenden Kommas überspringen die Elemente 0 und 1, sodass $third das Element 2 ("blue") erhält.
Verschachtelte Destrukturierung
list() kann verschachtelt werden, um mehrdimensionale Arrays zu entpacken. Die Struktur auf der linken Seite muss die Struktur des Arrays auf der rechten Seite widerspiegeln:
<?php
$coords = [[1, 2], [3, 4]];
[[$x1, $y1], [$x2, $y2]] = $coords;
echo "$x1,$y1 $x2,$y2"; // Output: 1,2 3,4Variablen tauschen
Da die rechte Seite vollständig ausgewertet wird, bevor die Zuweisung erfolgt, ist list() eine elegante Möglichkeit, zwei Variablen ohne eine temporäre Variable zu tauschen:
<?php
$a = 'first';
$b = 'second';
[$a, $b] = [$b, $a];
echo "$a $b"; // Output: second firstErweiterte Verwendung
Das list()-Konstrukt kann auch mit anderen PHP-Funktionen für komplexere Aufgaben kombiniert werden. Zum Beispiel funktioniert es gut mit explode(), um eine Zeichenkette in ein Array aufzuteilen:
In diesem Beispiel teilt explode() die Variable $string in ein Array auf. Das list()-Konstrukt weist dann die Array-Werte den Variablen $fruit1, $fruit2 und $fruit3 zu. Der Wert jeder Variable wird anschließend auf dem Bildschirm ausgegeben.
Zusätzlich unterstützt list() assoziative Arrays, indem Schlüssel mit Variablen abgeglichen werden:
<?php
$person = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];
list('name' => $name, 'age' => $age) = $person;
echo $name; // Output: Alice
echo $age; // Output: 30Beachte, dass die assoziative Form erfordert, dass jede Variable ihren Schlüssel angibt — man kann keine Schlüssel- und Positionseinträge in derselben list() mischen. Diese Form ist besonders nützlich beim Arbeiten mit strukturierten Daten wie JSON-Antworten oder Datenbankzeilen.
Destrukturierung in einer foreach-Schleife
list() (oder []) kann direkt in der Wertposition einer foreach-Schleife stehen und jede Zeile beim Iterieren entpacken. Dies ist ein gängiges Muster für Arrays aus Paaren oder Datensätzen:
<?php
$people = [
['Alice', 30],
['Bob', 25],
];
foreach ($people as [$name, $age]) {
echo "$name is $age\n";
}
// Output:
// Alice is 30
// Bob is 25Häufige Fallstricke
list()funktioniert nur mit Arrays. Die Übergabe einer Zeichenkette odernulldestrukturiert diese nicht zeichenweise; die Variablen werden einfach aufnullgesetzt (mit einer Warnung beinull).- Fehlende Elemente ergeben
null. Hat das Array weniger Elemente als Variablen, werden die überschüssigen Variablennullund PHP gibt eineUndefined array key-Warnung aus. Stelle sicher, dass das Array groß genug ist, oder verwende vorher einen Standardwert mit dem Null-Koaleszenz-Operator. - Die Zuweisungsreihenfolge ist nicht garantiert. Verlasse dich nicht darauf, welche Variable zuerst innerhalb eines einzelnen
list()zugewiesen wird; schreibe niemals Code, bei dem ein Ziel davon abhängt, dass ein anderes früher in derselben Anweisung zugewiesen wurde. - Schlüssel- und nicht-schlüsselbasierte Einträge können nicht gemischt werden. Innerhalb eines
list()verwenden entweder alle Einträge'key' => $varoder keiner.
Best Practices
- Verwende es, um Array-Teile zu benennen, nicht um Arrays zu erstellen.
list()liest aus einem Array; es erstellt nie eines. Greife aufarray()/[]zurück, wenn du Daten aufbauen möchtest. - Verwende aussagekräftige Variablennamen.
[$id, $name, $email] = $row;dokumentiert die Form von$rowviel besser als$row[0],$row[1],$row[2]verstreut im Code. - Bevorzuge die Kurzform
[]in PHP 7.1+ für Konsistenz mit den bereits verwendeten Array-Literalen. - Verwende die schlüsselbasierte Form für assoziative Daten, damit keine stille Abhängigkeit von der Einfügereihenfolge entsteht.
Fazit
Das list()-Konstrukt (und sein modernes []-Äquivalent) ermöglicht es, ein Array in einem ausdrucksstarken Ausdruck in benannte Variablen zu destrukturieren — nach Position, nach Schlüssel, verschachtelt oder innerhalb eines foreach. Verwende es, um den Teilen von Arrays, die von Funktionen wie explode() zurückgegeben werden, aussagekräftige Namen zu geben, und behalte die oben genannten Fallstricke im Blick, damit fehlende oder falsch geschriebene Werte keine unerwarteten Ergebnisse liefern.