4.7.3 Foreach

Diese Schleife arbeitet alle Elemente eines Arrays ab, wobei dies unabhängig vom Arraytyp ist. Durch die automatische Zuweisung in eine Variable pro Schleifendurchgang, kann mit nur minimalem Code schon eine umfangreiche Iteration durchgeführt werden.

$rgb = ["Red", "Green", "Blue"];
$cmyk = ["C" => "Cyan", "M" => "Magenta", "Y" => "Yellow", "K" => "Key"];

echo "rgb besteht aus: ";
foreach ($rgb as $color) {
    echo "$color, ";
}

echo "<br>cmyk besteht aus: ";
foreach ($cmyk as $letter => $color) {
    echo "$letter für $color, ";
}

Ausgabe:
rgb besteht aus: Red, Green, Blue,
cmyk besteht aus: C für Cyan, M für Magenta, Y für Yellow, K für Key,

Letzten Wert entfernen mit array_pop()

Das assoziative Array $_POST kann Daten aus einem Formular enthalten. Der letzte Datensatz besteht dabei typischerweise aus den Daten des Absendebuttons. Somit ist es oft sinnvoll, dass ein letzter Datensatz einfach entfernt werden soll. Dies kann mit array_pop() erfolgen (siehe Zeilen 4 & 5).

$rgb = ["Red", "Green", "Blue"];
$cmyk = ["C" => "Cyan", "M" => "Magenta", "Y" => "Yellow", "K" => "Key"];

$lastRgb = array_pop($rgb);
$lastCmyk = array_pop($cmyk);

echo "rgb besteht aus: ";
foreach ($rgb as $color) {
    echo "$color, ";
}

echo "<br>cmyk besteht aus: ";
foreach ($cmyk as $letter => $color) {
    echo "$letter für $color, ";
}

Ausgabe:
rgb besteht aus: Red, Green,
cmyk besteht aus: C für Cyan, M für Magenta, Y für Yellow,

In den Variablen $lastRgb bzw. $lastCmyk stehen die gelöschten Elemente drin. Somit kann man die gelöschten Elemente im Programm noch anderweitig verwenden.

Sicherheitshinweis

foreach ($_POST as $color) funktioniert zwar, ist aber nicht sicher, da eventuell nicht nur die gewünschten Variablen in dem Array $_POST stehen, sondern auch manipulierte Variablen an das PHP-Programm weitergereicht werden könnten. Somit sollte foreach ($_POST as $color) nur verwendet werden, wenn anschließend mit regulären Ausdrücken ALLE ungewünschten Daten herausgefiltert werden.

Übung

Wie kann man ein assoziatives Array unbekannter Länge mittels foreach() einfach in ein indiziertes Array umwandeln?

Lösung
1
2
3
4
$wish = ["w1" => "Urlaub", "w2" => "Sonne", "w3" => "Meer", "w4" => "Eis",...];
foreach ($wish as $key => $value) {
    $wishes[] = $value; // neues indiziertes Array der Reihe nach füllen.
}

Aufgabe

Die foreach-Syntax für assoziative Arrays foreach ($array as $key => $value) funktioniert übrigens auch bei indizierten Arrays. Was kommt dabei wohl heraus? Probieren Sie doch einmal aus.