# 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.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    <?php
    $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).

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $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
    5
    <?php
    $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.