PHP Handbuch | ||
---|---|---|
Zurück | Kapitel 12. Kontroll-Strukturen | Nach vorne |
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 einer Variable eines anderen Datentyps oder einer nicht initialisierten Variable zu benutzen, gibt PHP einen Fehler aus. Es gibt zwei Syntax-Formen; die zweite ist eine unbedeutende, aber sinnvolle Erweiterung der ersten Syntax:
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 Array-Pointer automatisch auf das erste Element des Arrays zurück 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 Array-Pointer 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: Fehlermeldungen durch den Gebrauch von '@' zu unterdrücken ist bei foreach nicht möglich.
Beachten Sie, dass die folgenden Beispiele in ihrer Funktionalität identisch sind:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Wert: $value<br>\n"; } foreach ($arr as $value) { echo "Wert: $value<br>\n"; } |
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:
/* foreach Beispiel 1: Nur der Wert */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Aktueller Wert von \$a: $v.\n"; } /* foreach Beispiel 2: Wert (mit Ausgabe des Array-Schlüssels zur Veranschaulichung) */ $a = array (1, 2, 3, 17); $i = 0; /* nur zu Veranschaulichung */ foreach($a as $v) { print "\$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) { print "\$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) { print "$v2\n"; } } /* foreach Beispiel 5: dynamische Arrays */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } |