Foreach in PHP

Mit Foreach steht unter PHP ein Schleifentyp zur Verfügung, mit dessen Hilfe der Programmierer auf einfache Weise durch Datenfelder iterieren kann. Die Iteration durch Arrays ist auch die einzige Aufgabe, für die man die Foreach-Schleife verwenden kann. Foreach ist eine kopfgesteuerte Schleife, was bedeutet, dass die Schleifenbedingung grundsätzlich vor dem Eintritt in den Schleifenkörper geprüft wird. Trifft diese Bedingung nicht zu, so wird der Schleifenkörper auch nicht ausgeführt. Wie bei allen anderen Schleifentypen müssen Anweisungsblöcke (mehrere pro Schleifendurchgang auszuführende Anweisungen) geklammert werden. Soll lediglich eine einzige Anweisung mehrfach ausgeführt werden, so erübrigt sich eine Klammerung.

Andere unter PHP einsetzbare Schleifen, die gleichermaßen zu den kopfgesteuerten Schleifentypen zählen, sind die While-Schleife und die For-Schleife. Als einzige fußgesteuerte Schleifenvariante gibt es auch unter PHP die do-While-Schleife. Beachten Sie bitte auch unsere Ausführungen zu Foreach in JavaScript.

PHP Array Foreach: Alle Elemente in Arrays einzeln durchgehen

Folgendes Anwendungsbeispiel nutzt eine Variable zur Speicherung des Arrays, über dessen Elemente durch die Foreach-Schleife iteriert werden soll. Hier wird zugleich das direkte Ändern der im Array abgelegten Werte demonstriert – was mit einer Referenzierung der Array-Elemente möglich ist. Mit echo werden die im Array enthaltenen Elemente ausgegeben.

<?php
    // Array mit Zahlenwerten initialisieren
    $zahlenarray = array (1, 2, 3, 4, 5);
    // Ausgabe des Arrays
    foreach ($zahlenarray as $value)
        // Nach dem eigentlichen Wert aus value wird ein Komma oder ein
        // Zeilenumbruch (durch den HTML-Code <br>) ausgegeben. Durch die
        // verkürzte If-Abfrage wird bei jedem Schleifendurchgang geprüft,
        // ob das Letzte Element erreicht wurde. In diesem Falle wird
        // der Zeilenumbruch, statt des Komma und dem darauf folgenden
        // Leerzeichen ausgegeben. Dies funktioniert natürlich nur solange
        // es den letzten Wert im Array nicht mehrfach gibt
        echo $value . ($value == end ($zahlenarray) ? '<br>' : ', ');

    // Folgender Versuch die Werte im Array zu ändern klappt nicht. Das liegt
    // daran, dass stets eine Kopie des jeweiligen Array-Elements der Variablen
    // value zugewiesen wird. Änderungen wirken sich deshalb nicht auf das
    // Array aus sondern nur auf die Kopie in der Variablen varlue.
    foreach ($zahlenarray as $value)
        $value++;

    // Folgende Ausgabe zeigt, dass die im Array gespeicherten Daten nicht
    // verändert wurden.
    foreach ($zahlenarray as $value)
        echo $value . ($value == end ($zahlenarray) ? '<br>' : ', ');

    // Der nächste Abschnitt nutzt keine Kopien der Werte, sondern referenziert
    // die Array-Werte, wodurch die Speicherstellen im Array direkt angesprochen
    // und entsprechende verändert werden.
    foreach ($zahlenarray as &$value)
        $value++;

    // Nun nocheinmal das Array ausgeben, in dem das gewünschte Ergebnis
    // zu sehen ist.
    foreach ($zahlenarray as &$value)
        echo $value . ($value == end ($zahlenarray) ? '<br>' : ', ');
?>

1, 2, 3, 4, 5
1, 2, 3, 4, 5
2, 3, 4, 5, 6

PHP Foreach Key und Value: Iteration über die Schlüssel-Werte-Paare

Der Zugriff auf die Key-Value-Paare soll im nächsten Beispiel gezeigt werden. Bei der Initialisierung eines Arrays werden im Prinzip auch Key und Value für jedes einzelne Element im Array vergeben. Ohne Angabe eines bestimmten Keys wird das Array einfach automatisch mit Integer-Keys angelegt, wobei die Elemente – angefangen mit dem Key 0 für das Erste – automatisch durchnummeriert werden. Darüber hinaus kann mit der Foreach-Schleife auf beliebige Key-Value-Paare, die durch ein assoziatives Array definiert wurden, zugegriffen werden.

<?php
    // Variable definieren und zugleich die initialen Elemente im Array
    // ablegen. Die Key-Werte (Indexe) der Array-Elemente werden dabei
    // automatisch vergeben.
    $paare = array ('Inhalt 1', 'Inhalt 2', 'Inhalt 3');
    // Iteration über die Elemente des Arrays, wobei die Variablen key und
    // value bei jedem Iterationsschritt durch den Schlüssel bzw. den Inhalt
    // an der entsprechenden Indexposition belegt wird.
    foreach ($paare as $key => $value)
        echo 'Key: ' . $key . ' enth&auml;lt den Wert ' . $value . '<br>';

    // Array erneut mit Elementen initialisieren
    // Diesmal erfolgt die Initialisierung mit einzelnen Schlüssel-Werte-Paaren
    // (mit key und value), wodurch ein assoziatives Array abgebildet wird.
    $paare = array ('Variable 1' => 'Wert 1',
            'Variable 2' => 'Wert 2',
            'Variable 3' => 'Wert 2');
    // Mit dieser Aufteilung in Key und Value gehen wir widerum auf die
    // einzelnen Elemente los und enthalten die Paare aus definiertem Schlüssel
    // und dem jeweiligen Inhalt des Array-Index. Ein Reset erübrigt sich an
    // dieser Stelle, da der Positionszeiger durch foreach automatisch
    // zurückgesetzt wird.
    foreach ($paare as $key => $value)
        echo 'Key: ' . $key . ' enth&auml;lt den Wert ' . $value . '<br>';
?>

Key: 0 enthält den Wert Inhalt 1
Key: 1 enthält den Wert Inhalt 2
Key: 2 enthält den Wert Inhalt 3
Key: Variable 1 enthält den Wert Wert 1
Key: Variable 2 enthält den Wert Wert 2
Key: Variable 3 enthält den Wert Wert 2

PHP Foreach und Break: Vorzeitiger Abbruch der Foreach-Schleife

Im letzten Beispiel soll das vorzeitige Abbrechen der Foreach-Schleife mit der Break-Anweisung thematisiert werden. Break kann nicht allein zum Beenden eines Falles im Switch-Statement verwendet werden – hier wird jeder „Case” mit einem Break beendet, wenn die darauf folgenden Anweisungen nicht mehr ausgeführt werden sollen. Aber auch mit einer einfachen If-Abfrage kann die Verarbeitung der Foreach-Schleife beendet werden, wenn bestimmte Abbruchkriterien zutreffen.

<?php
    // Variable zur Speicherung eines Vergleichswertes
    $aktuelle_major_version = 5;

    // Die Foreach-Schleife kann nicht allein mit einem in einer Variablen
    // gespeicherten Array gefüttert werden sondern auch mit dynamischen
    // Arrays arbeiten. Hier wird ein Array dynamisch für die Foreach-Schleife
    // erzeugt. Nach Ausführung der Schleife wird das Array zerstört. Die
    // im Array enthaltenen Elemente werden nacheinander aus dem Array
    // entnommen und in der Variable php zwischengespeichert.
    foreach (array (1, 2, 3, 4, 5, 6, 7) as $php) {
        // Wenn die in php gespeicherte Versionsnummer die aktuelle
        // übersteigt, wird die Foreach-Schleife abgebrochen.
        if ($php > $aktuelle_major_version)
            // Der hier angegebene Parameter 1 kann auch entfallen,
            // da der Abbruch nur über eine Schleifenebene erfolgen
            // soll.
            break 1;
        // Wurde die Schleife nicht abgebrochen, so folgt eine Ausgabe,
        // mit einem abschießenden Zeilenumbruch (mittels HTML-Code des
        // BR-Tags).
        echo 'PHP ' . $php . '.x gibt es!<br>';
    }

    // Folgendes Beispiel nutzt wieder ein Array mit Zahlenwerten, durch das
    // mittels Foreach iteriert wird, wobei die einzelnen Werte aus dem Array
    // in der Variablen element landen.
    foreach (array (1, 2, 3, 4, 5) as $element) {
        // Mit diesem Switch-Statement soll die umschließende Foreach-Schleife
        // gesteuert werden.
        switch ($element) {
            // Enthält die Variable element den Wert 3, so wird die
            // Arrayverarbeitung durch Foreach beendet. Hierzu wird
            // break mit dem Parameter 2 aufgerufen. Wird break ohne
            // oder mit dem Parameter 1 aufgerufen, so führt dies
            // lediglich zur Beendigung des Switch-Statements. Mit
            // Angabe von 2 wird der Case und die übergeordnete
            // Verarbeitung von Foreach abgebrochen.
            case 3:
                break 2;
            // In allen anderen Fällen soll das Element ausgegeben
            // werden.
            default:
                echo $element . ' ... ';
        }
    }
    echo '<br>';

    // Auch hier wird wieder eine dynamische Werteliste verarbeitet
    foreach (array (-1, 1, 2, 3, 4, 5, 6, 7) as $php) {
        // Fallunterscheidungen wieder durch Switch-Case-Statement
        switch ($php) {
            // Abbruch von Switch, wenn die Variable -1 enthält
            case -1:
                break;
            // Wenn die aktuelle Version erreicht ist, dann wird dies
            // entsprechend gemeldet und danach das Switch und auch
            // das Foreach-Statement beendet.
            case $aktuelle_major_version:
                echo 'PHP-Version ' . $php . ' ist die letzte existierende Major-Version!<br>';
                break 2;
            // In allen andere Fällen soll einfach nur eine Ausgabe erfolgen
            default:
                echo 'PHP ' . $php . ' existiert!<br>';
        }
    }
?>

PHP 1.x gibt es!
PHP 2.x gibt es!
PHP 3.x gibt es!
PHP 4.x gibt es!
PHP 5.x gibt es!
1 ... 2 ...
PHP 1 existiert!
PHP 2 existiert!
PHP 3 existiert!
PHP 4 existiert!
PHP-Version 5 ist die letzte existierende Major-Version!

¬ Tutorials



¬ Insolvenzrecht