PHP Handbuch | ||
---|---|---|
Zurück | Kapitel 12. Kontroll-Strukturen | Nach vorne |
PHP 4 (nicht PHP 3) enthält eine foreach-Funktion, genau wie Perl und andere Sprachen. Diese ermöglicht es, auf einfache Weise ein Array zu durchlaufen. 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 1 erhöht. Dadurch wird beim nächsten Durchgang automatisch das nächste Element ausgewertet.
Die zweite Form arbeitet genauso, ausser 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 heisst, dass Sie nicht reset() vor einem Durchlauf von foreach aufrufen müssen.
Anmerkung: Beachten Sie auch, dass foreach mit einer Kopie des angegebenen Arrays arbeitet. Deshalb wird auch der Array-Pointer nicht wie bei dem each-Konstrukt verändert.
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) */ $a = array (1, 2, 3, 17); $i = 0; /* nur für Anschauungs-Zweck */ 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"; } |