foreach
(PHP 4, PHP 5, PHP 7, PHP 8)
Das foreach-Konstrukt bietet eine einfache Möglichkeit
über arrays und
Traversable-Objekte zu iterieren.
foreach erzeugt einen Fehler, wenn es mit einer Variablen
verwendet wird, die einen anderen Datentyp enthält oder mit einer Variablen,
die nicht initialisiert wurde.
Die erste Form durchläuft das in
iterable_expression angegebene Iterable.
Bei jedem Durchlauf wird der Wert des aktuellen Elementes der
Variable $value zugewiesen.
Die zweite Form schreibt zusätzlich den Schlüssel des aktuellen
Elementes in jedem Durchlauf in die Variable $key.
Es ist zu beachten, dass foreach den internen Array-Zeiger
nicht verändert, der von Funktionen wie current() und
key() verwendet wird.
Es ist möglich, die
Objektiteration anzupassen.
Beispiel #1 Gängige Verwendungen von foreach
<?php
/* Beispiel: Nur Werte */
$array = [1, 2, 3, 17];
foreach ($array as $value) {
echo "Aktueller Wert von \$array: $value.\n";
}
/* Beispiel: Schlüssel und Wert */
$array = [
"eins" => 1,
"zwei" => 2,
"drei" => 3,
"siebzehn" => 17
];
foreach ($array as $key => $value) {
echo "Schlüssel: $key => Wert: $value\n";
}
/* Beispiel: Mehrdimensionale Schlüssel-Wert-Arrays */
$grid = [];
$grid[0][0] = "a";
$grid[0][1] = "b";
$grid[1][0] = "y";
$grid[1][1] = "z";
foreach ($grid as $y => $row) {
foreach ($row as $x => $value) {
echo "Wert an Position x=$x und y=$y: $value\n";
}
}
/* Beispiel: Dynamische Arrays */
foreach (range(1, 5) as $value) {
echo "$value\n";
}
?>
Hinweis:
foreach unterstützt die Fehlerunterdrückung mittels
@
nicht
Entpacken verschachtelter Arrays
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
Es ist möglich, über Arrays von Arrays zu iterieren
und dabei die verschachtelten Arrays in Schleifenvariablen zu entpacken,
indem entweder die
Array-Destrukturierung
mittels [] oder das Sprachkonstrukt
list() als Wert verwendet wird.
Hinweis:
Es ist zu beachten, dass die
Array-Destrukturierung
mittels [] erst seit PHP 7.1.0 möglich ist.
Wenn weniger Variablen angegeben werden, als Elemente im Array vorhanden
sind, werden die restlichen Elemente ignoriert.
Ebenso können Elemente durch die Verwendung eines Kommas übersprungen werden:
Gibt es nicht ausreichend Elemente im Array, um list()
zu füllen, wird eine Notice erzeugt.
foreach und Referenzen
Array-Elemente können innerhalb einer Schleife direkt geändert werden, indem
$value ein & vorangestellt wird.
In diesem Fall wird der Wert per
Referenz zugewiesen.
Warnung
Die Referenz auf ein $value des letzten Array-Elements
bleibt auch nach der foreach-Schleife erhalten. Es wird
empfohlen, diese mittels unset() zu löschen.
Andernfalls tritt folgendes Verhalten auf:
Beispiel #2 Werte eines konstanten Arrays per Referenz durchlaufen
<?php
foreach ([1, 2, 3, 4] as &$value) {
$value = $value * 2;
}
?>