for
break
Kontroll-Strukturen
PHP Manual

## foreach

Mit PHP 4 wurde ein foreach Konstrukt eingeführt, 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.

> Hinweis: 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.

> Hinweis: 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.
> Beginnend mit PHP 5 können Sie die Arrayelemente einfach ändern wenn Sie der $value Variable ein & voranstellen. Hierdurch werden die Elemente per reference zugewiesen und nicht als Kopie des Wertes.

> `<?php
> $arr = array(1, 2, 3, 4);
> foreach ($arr as &$value) {
> $value = $value * 2;
> }
> // $arr ist nun array(2, 4, 6, 8)
> ?>`
> Dies ist nur möglich wenn das Array referenziert werden kann (d.h. veränderbar ist).

> Hinweis: 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 = array();
$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";
}
?>`

for
break
Kontroll-Strukturen
PHP Manual