foreach
(PHP 4, PHP 5, PHP 7, PHP 8)
Das foreach-Konstrukt bietet eine einfache Möglichkeit
über Arrays zu iterieren. foreach arbeitet nur mit
Arrays und Objekten zusammen und gibt beim Versuch es mit einer
Variablen mit einem anderen Datentypen oder einer nicht initialisierten
Variablen zu benutzen einen Fehler aus. Es gibt zwei
Schreibweisen:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Die erste Form durchläuft das in
array_expression angegebene Array.
Bei jedem Durchlauf wird der Wert des aktuellen Elementes der
Variable $value zugewiesen und der interne
Array-Zeiger um eins erhöht (womit im nächsten Durchlauf das
nächste Element betrachtet wird).
Die zweite Form schreibt zusätzlich den Schlüssel des aktuellen
Elementes in jedem Durchlauf in die Variable $key.
Hinweis:
Zu Beginn der Ausführung unter PHP 5 setzt foreach den
internen Arrayzeiger automatisch auf das erste Element des
Arrays zurück. Das bedeutet, dass es nicht notwendig ist vor
einer foreach-Schleife
Da foreach sich unter PHP 5 auf den internen Arrayzeiger
verlässt, kann es zu unerwartetem Verhalten führen, wenn dieser
innerhalb der Schleife verändert wird.
Unter PHP 7 verwendet foreach den internen Arrayzeiger
nicht.
Um Arrayelemente innerhalb der Schleife direkt verändern zu können, muss
dem Variablennamen $value ein & vorangestellt
werden. In diesem Fall wird dieser Variablen eine
Referenz zugewiesen.
$arr= array(1,2,3,4);
foreach ($arras &$value) {$value=$value*2;
}// $arr ist nun array(2, 4, 6, 8)unset($value);// Entferne die Referenz auf das letzte Element?>
Warnung
Die Referenz eines $value auf das letzte Arrayelement
bleiben auch nach der foreach-Schleife bestehen.
Es wird empfohlen, diese durch
$arr= array(1,2,3,4);
foreach ($arras &$value) {$value=$value*2;
}// $arr ist jetzt array(2, 4, 6, 8)
// ohne ein unset($value), bleibt $value weiterhin eine Referenz auf das letzte Element: $arr[3]foreach ($arras$key=>$value) {// $arr[3] wird mit jedem Wert von $arr aktualisiert...echo"{$key}=>{$value}";print_r($arr);
}// bis schließlich der vorletzte Wert in den letzten Wert kopiert wird
// Ausgabe:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )?>
Vor PHP 5.5.0 ist eine Referenz auf $value nur dann möglich, wenn
das Array referenzierbar ist (d.h. es ist eine Variable). Der folgende
Code funktioniert erst ab PHP 5.5.0:
}?>
Hinweis:
foreach unterstützt die Fehlerunterdrückung
mittels '@' nicht.
Einige weitere Beispiele, die die Nutzung demonstrieren:
foreach ($aas$v) {
echo"Aktueller Wert von \$a:$v.\n";
}/* foreach Beispiel 2: Werte (mit Schreibweise für Zugriff zur Veranschaulichung) */$a= array(1,2,3,17);$i=0;/* nur zur Veranschaulichung */foreach ($aas$v) {
echo"\$a[$i] =>$v.\n";$i++;
}/* foreach Beispiel 3: Schlüssel und Wert */$a= array("eins"=>1,"zwei"=>2,"drei"=>3,"siebzehn"=>17);
foreach ($aas$k=>$v) {
echo"\$a[$k] =>$v.\n";
}/* foreach Beispiel 4: Mehrdimensionale Arrays */$a= array();$a[0][0] ="a";$a[0][1] ="b";$a[1][0] ="y";$a[1][1] ="z";
foreach ($aas$v1) {
foreach ($v1as$v2) {
echo"$v2\n";
}
}/* foreach Beispiel 5: Dynamische Arrays */foreach (array(1,2,3,4,5) as$v) {
echo"$v\n";
}?>
Entpacken verschachtelter Arrays mit list()
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
PHP 5.5 hat die Fähigkeit hinzugefügt über Arrays von Arrays zu iterieren
und dabei die verschachtelten Arrays in Schleifenvariablen zu entpacken,
indem man ein
For example:
$array= [
[1,2],
[3,4],
];
foreach ($arrayas list($a,$b)) {// $a enthält das erste Element des verschachtelten Arrays
// und $b enthält das zweite Elementecho"A:$a; B:$b\n";
}?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
A: 1; B: 2
A: 3; B: 4
Es können auch weniger Elemente in
$array= [
[1,2],
[3,4],
];
foreach ($arrayas list($a)) {// Beachten Sie, dass es hier kein $b gibt.echo"$a\n";
}?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
1
3
Gibt es nicht ausreichend Elemente im Array, um
$array= [
[1,2],
[3,4],
];
foreach ($arrayas list($a,$b,$c)) {
echo"A:$a; B:$b; C:$c\n";
}?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:
Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C:
Changelog
Version
Beschreibung
7.0.0
foreach verwendet den internen Arrayzeiger nicht mehr.
5.5.0
Die Referenzierung von $value wird für Ausdrücke unterstützt.
Zuvor wurden nur Variablen unterstützt.
5.5.0
Das Entpacken verschachtelter Arrays mit