Menu

PHP list() und Array-Destructuring: [$a, $b] = $arr

[$a, $b] = $array weist die ersten zwei Elemente in einer Zeile $a und $b zu, und ['name' => $name] = $user macht dasselbe über den Schlüssel. list() ist die ältere Schreibweise. Mit Elemente überspringen, Variablen tauschen, mehreren Rückgabewerten, Destructuring in foreach und dem Spread-Operator ...

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

[$a, $b] = $array; zerlegt die Elemente eines Arrays in einer Zeile in einzelne Variablen: $a bekommt $array[0], $b bekommt $array[1]. list($a, $b) = $array; ist die ältere Schreibweise davon, und ['name' => $name] = $user; macht es über den Schlüssel.

Destructuring mit explode() zu kombinieren ist der klassische Einsatz: String aufteilen, die Teile benennen, weitermachen.

Elemente überspringen

Lass eine Position leer, um sie zu überspringen. Du kannst auch früh aufhören: Nicht verwendete Elemente am Ende werden ignoriert.

Ein assoziatives Array über Schlüssel zerlegen

Mit Schlüsseln spielt die Reihenfolge im Array keine Rolle, und du nimmst nur die Felder, die du brauchst. Der Schlüssel steht vor =>, die Variable dahinter.

Muster lassen sich bei Listen genauso verschachteln: [[$x1, $y1], [$x2, $y2]] = $line; liest zwei Punkte auf einmal. Seit PHP 7.3 kann eine Variable in einem Muster auch eine Referenz sein, [, &$second] = $counts;, sodass eine Änderung an $second das Array ändert.

Eine Zuweisung verwendet entweder Positionen oder Schlüssel, nie beides. [$a, 'k' => $b] = $arr; stoppt mit Cannot mix keyed and unkeyed array entries in assignments.

Zwei Variablen tauschen

Bau ein Array aus den beiden Werten in umgekehrter Reihenfolge und zerlege es zurück. Keine Hilfsvariable nötig.

Mehrere Werte aus einer Funktion zurückgeben

Eine PHP-Funktion gibt einen Wert zurück, aber dieser Wert kann ein Array sein. Destructuring an der Aufrufstelle lässt es wie mehrere Rückgabewerte aussehen. Bei mehr als zwei oder drei Werten gibst du Schlüssel zurück, damit der Aufrufer die Reihenfolge nicht verwechseln kann.

Destructuring in foreach

Dieselbe Syntax funktioniert in der foreach-Zeile, sodass jede Zeile schon in benannte Variablen zerlegt ankommt. Das ist gemeint, wenn von „foreach mit list()“ die Rede ist. Weitere Schleifenmuster stehen auf der Seite zu foreach.

Der Spread-Operator (...)

Die drei Punkte entpacken ein Array an Ort und Stelle. In einem Array-Literal führt [...$a, ...$b] Arrays zusammen. In einem Funktionsaufruf übergibt f(...$args) die Elemente als einzelne Argumente. In einer Funktionsdefinition sammelt ...$args zusätzliche Argumente in einem Array.

Vor PHP 8.1 war das Spreaden eines Arrays mit String-Schlüsseln ein Fehler; jetzt bleiben String-Schlüssel erhalten und numerische Schlüssel werden neu nummeriert, nach denselben Regeln wie bei array_merge(). Variadische Parameter wie ...$amounts werden mit den anderen Parameterarten auf der Seite zu Funktionen behandelt.

Typischer Fehler: weniger Elemente als Variablen

Ist das Array kürzer als das Muster, werden die fehlenden Variablen zu null, und PHP gibt für jede eine Warnung aus. Das passiert bei Eingaben, die du nicht kontrollierst, etwa einer Zeile mit fehlenden Feldern. Bei [$name, $city, $country] = explode(',', 'Grace'); gibt PHP aus:

Warning: Undefined array key 1 in /var/www/html/import.php on line 5

Warning: Undefined array key 2 in /var/www/html/import.php on line 5

Entscheide, was ein fehlendes Teil sein soll, und fülle das Array vor dem Destructuring auf:

Bei Mustern mit Schlüsseln führst du vorher Standardwerte zusammen: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. Der Operator + fügt nur Schlüssel hinzu, die $input noch nicht hat.

Häufig gestellte Fragen

Was macht list() in PHP?

list($a, $b) = $array; weist $array[0] der Variable $a und $array[1] der Variable $b zu. Seit PHP 7.1 macht die Kurzform [$a, $b] = $array; genau dasselbe, und beide Formen akzeptieren Schlüssel: ['id' => $id] = $row;.

Wie tausche ich in PHP zwei Variablen?

Zerlege ein neues Array aus beiden in umgekehrter Reihenfolge: [$a, $b] = [$b, $a];. Eine Hilfsvariable ist nicht nötig.

Kann ich list() in PHP mit einem assoziativen Array verwenden?

Ja, seit PHP 7.1. Nenne die Schlüssel: ['name' => $name, 'email' => $email] = $user; oder list('name' => $name) = $user;. Ohne Schlüssel sucht [$a, $b] = $user; nach den Schlüsseln 0 und 1 und bekommt null mit einer Warnung.

Was sind die drei Punkte (...) in PHP?

Der Spread-Operator. In einem Array-Literal kopiert [...$a, ...$b] die Elemente beider Arrays in ein neues. In einem Aufruf übergibt max(...$numbers) die Elemente als einzelne Argumente. In einer Funktionsdefinition sammelt function sum(...$numbers) beliebig viele Argumente in einem Array.

Was passiert, wenn das Array weniger Elemente hat als Variablen in list()?

Die übrigen Variablen bekommen null, und PHP gibt eine Warnung wie Undefined array key 2 aus. Fülle das Array vorher auf, zum Beispiel [$a, $b, $c] = array_pad($parts, 3, null);.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S