PHP Handbuch
Zurück | Kapitel 16. Kontroll-Strukturen | Weiter

# `foreach`

PHP 4 (nicht PHP 3) enthält ein `foreach` Konstrukt, genau wie Perl und einige andere Sprachen. Diese ermöglicht es, auf einfache Weise ein Array zu durchlaufen. `foreach` funktioniert nur in Verbindung mit Arrays. Wenn Sie versuchen `foreach` mit Variablen eines anderen Datentyps oder nicht initialisierten Variablen zu benutzen, gibt PHP einen Fehler aus. Es gibt zwei Syntaxformen; die zweite ist eine unbedeutende, aber sinnvolle Erweiterung der ersten Syntax:

    foreach (array_expression as $value) Anweisung
    foreach (array_expression as $key => $value) Anweisung

Die erste Form durchläuft das `array_expression`-Array. Bei jedem Durchgang wird der Wert des aktuellen Elements `$value` zugewiesen und der interne Array-Zeiger um eins erhöht. Dadurch wird beim nächsten Durchgang automatisch das nächste Element ausgewertet.

Die zweite Form arbeitet genauso, außer dass bei jedem Durchlauf auch der aktuelle Schlüssel der Variablen `$key` zugewiesen wird.

> Anmerkung: Sobald `foreach` zum ersten Mal ausgeführt wird, wird der interne Arrayzeiger automatisch auf das erste Element des Arrays gesetzt. Das bedeutet, dass Sie vor einem Durchlauf von `foreach` reset() nicht aufrufen müssen.

> Anmerkung: Beachten Sie auch, dass `foreach` mit einer Kopie des angegebenen Arrays arbeitet, nicht mit dem Array selbst. Deshalb wird auch der Arrayzeiger nicht wie bei dem each()-Konstrukt verändert und Veränderungen an ausgegebenen Arrayelementen haben keine Auswirkung auf das originale Array. Trotzdem wird der interne Arrayzeiger des originalen Arrays bei der Verarbeitung bewegt. Angenommen, die foreach-Schleife ist komplett abgearbeitet, wird der interne Arrayzeiger (des originalen Arrays) auf das letzte Element zeigen.

> Anmerkung: Bei `foreach` ist es nicht möglich Fehlermeldungen durch den Gebrauch von '@' zu unterdrücken ist

Beachten Sie, dass die folgenden Beispiele in ihrer Funktionalität identisch sind:

`<?php $arr = array("eins", "zwei", "drei"); reset ($arr); while (list(, $value) = each ($arr)) { echo "Wert: $value<br />\n"; } foreach ($arr as $value) { echo "Wert: $value<br />\n"; } ?>`

Auch hier funktioniert alles gleich:

`<?php $arr = array("eins", "zwei", "drei"); reset ($arr); while (list($key, $value) = each ($arr)) { echo "Schlüssel: $key; Wert: $value<br />\n"; } foreach ($arr as $key => $value) { echo "Schlüssel: $key; Wert: $value<br />\n"; } ?>`

Noch einige Beispiele, die die Anwendung verdeutlichen:

`<?php
/* foreach Beispiel 1: Nur der Wert */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Aktueller Wert von \$a: $v.\n";
}
/* foreach Beispiel 2:
Wert (mit Ausgabe des Arrayschlüssels zur Veranschaulichung) */
$a = array(1, 2, 3, 17);
$i = 0; /* nur zu Veranschaulichung */
foreach($a as $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($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* foreach Beispiel 4: multidimensionale Arrays */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* foreach Beispiel 5: dynamische Arrays */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>`

Zurück | Zum Anfang | Weiter
`for` | Nach oben | `break`