PHP While-Schleife

Mit der PHP While-Schleife lassen sich Code-Abschnitte – sogenannte Anweisungsblöcke – mehrfach hintereinander ausführen. Sie gehöhrt zu den Sprachelementen der Programmiersprache PHP und sorgt dafür, dass nach einer Eingangsprüfung der Schleifenbedingung, die Anweisung im Schleifenkörper solange ausgeführt wird, bis die Schleifenbedingung nicht mehr erfüllt ist. Sollen mehrere Anweisungen ausgeführt werden, so ist eine Klammerung des Anweisungsblocks nötig. Da vor Erreichen des Schleifenkörpers, der die bedingten Anweisungen enthält, die Bedingung zur Ausführung der Schleife geprüft wird, wird die While-Schleife auch als kopfgesteuerte Schleife bezeichnet. Die PHP While-Anweisung ist nicht die einzige kopfgesteuerte Schleife unter PHP. Auch die For- und die Foreach-Scheife gehören zu den kopfgesteuerten Schleifen.

Anders als while ist die do-While-Schleife eine fußgesteuerte Schleife, da hier die Schleifenbedingung erst nach einmaligem Ausführen des Schleifenkörpers validiert wird. Neben den beiden Typen der While-Schleife gibt es auch unter PHP die For-Schleife und auch eine Foreach-Schleife. Zu den Sprachelementen von PHP beachten Sie bitte auch das If-Statement sowie die Ablaufsteuerung durch switch.

While in PHP: Schleife mit einer Variablen, die als Zähler dient

Im Script-Block unten werden Variablen definiert, die als Zähler genutzt werden und über welche die Steuerung der darauf folgenden While-Schleifen realisiert ist. Neben der Klammerung der Schleifenkörper von While-Anweisungen wird hier gezeigt, dass die Tatsache, dass es sich um eine kopfgesteuerte Schleife handelt, sich unmittelbar auf den Programmablauf auswirkt. Stimmt die Schleifenbedingung nicht, so kommt der enthaltene Code gar nicht erst zur Ausführung, was gelegentlich zu schwer nachvollziehbaren Fehlern führen kann.

<?php
    // Variable i wird künftig als Zähler verwendet und sollte (wie übrigens
    // alle Variablen) zur Sicherheit zunächst einmal initialisiert werden.
    $i = 0;
    echo 'Werte von i:';
    // Achtung: Die Variable i wird VOR der Prüfung der Schleifenbedingung
    // inkrementiert (hochgezählt). Beim Eintritt in die Schleife enthält
    // i den Wert 1. Sie wird so lange durchlaufen, bis i den Wert 10 erreicht
    // hat. Eine Klammerung ist hier nicht nötig, da nur eine einzige Anweisung
    // im Schleifenkörper enthalten ist.
    while (++$i <  10)
        echo ' ' . $i;
    echo '<br>';

    echo 'Inhalt der Variablen i nach der While-Schleife: ' . $i . '<br>';
    // Der Schleifenkörper folgender While-Schleife kommt nie zur Ausführung
    // da die Schleifenbedingung schon zu Anfang nicht zutrifft. Hierin
    // unterscheidet sich die PHP while-Schleife von der do-While-Variante,
    // wo der Körper der Schleife mindestens einmal durchlaufen wird. Erst
    // nachdem die enthaltenen Anweisungen ausgeführt wurden wird die
    // Abbruchbedingung geprüft und die Schleifenausführung ggf. abgebrochen.
    // Die hier gezeigte Variante wird über den Schleifenkopf gesteuert, während
    // die do-While-Schleife fußgesteuert ist.
    while ($i < 10) {
        echo 'Hier kommen wir nie an!<br>';
        $i--;
    }

    echo 'Werte der Variablen i:';
    // Hier ist eine Klammer nötig, da sonst nur die echo-Anweisung in der
    // Schleife ausgeführt würde und der Inhalt von der Variablen i nie verändert
    // wird. Die Schleife liefe endlos weiter, da die Schleifenbedingung immer
    // zutrifft.
    while ($i != 0) {
        echo ' ' . $i;
        $i--;
        // Alternativ kann die Klammerung wegfallen, wenn die Ausgabe und
        // des herunterzähen mit folgender Anweisung realisiert wird.
        //echo ' ' . $i--;
    }
?>

Werte von i: 1 2 3 4 5 6 7 8 9
Inhalt der Variablen i nach der While-Schleife: 10
Werte der Variablen i: 10 9 8 7 6 5 4 3 2 1

PHP While Array: Iteration über Felder

Im nächsten Abschnitt finden Sie einige Beispiele zur Nutzung der While-Schleife unter PHP bei der Verarbeitung von Arrays. Dazu werden sowohl ein- als auch mehrdimensionale Arrays definiert und in Variablen gespeichert. Die Iteration erfolgt jeweils über die internen Array-Zeiger, die auf das jeweils aktuell in der Verarbeitung befindliche Element verweisen.

<?php
    // Array mit Schlüssel und zugehörigem Wert initialisieren
    $a = array ('ID' => '123A456B', 'PRODUCT' => 'DVD-Player', 'PREIS' => 49.95);
    echo 'Inhalt:';
    // Iteration mit While über das Array
    while ($wert = current ($a)) {
        // Ausgabe des aktuellen Elements
        echo ' ' . $wert;
        // und dann den Zeiger auf das nächste Element setzen
        next ($a);
    }
    echo '<br>';

    // Vorsicht! Vor einer weiteren Iteration durch das Array muss der interne
    // Zeiger wieder zurück gesetzt werden.
    reset ($a);
    // Schlüssel-Werte-Paare des Arrays mit each ermitteln bis keine weiteren
    // Elemente mehr gefunden werden.
    while (list ($key, $val) = each ($a))
        echo 'Schlüssel: ' . $key . ', Wert: ' . $val . '<br>';

    // 2-dimensionales Array mit Wortlisten definieren
    $a = array (
        array ('aber',  'auch', 'an', 'am'),
        array ('bei', 'bis', 'bin', 'bald'),
        array ('das', 'der', 'die', 'den', 'dem', 'des')
        );
    // Mehrdimensionales Array mit While-Schleifen durchlaufen
    // 1. Dimension über den internen Array-Zeiger ansprechen (Reihen)
    while ($b = current ($a)) {
        // 2. Dimension enthält die Worte auch in einem Array
        // Die Variable b wird je Durchgang durch die aktuelle Reihe
        // ersetzt. Der interne Element-Zeiger wird dabei automatisch
        // für b durch die Zuweisung zurückgesetzt, was ein reset hier
        // überflüssig macht.
        while ($wort = current ($b)) {
            // Ausgabe des aktuellen Wortes und in 2. Dimension um
            // ein Element weiter (eine Spalte)
            echo $wort . ' ';
            next ($b);
        }
        // Nach jeder Zeile soll ein Zeilenumbruch ausgegeben werden
        echo '<br>';
        // In 1. Dimension fortfahren (nächste Reihe)
        next ($a);
    }
?>

Inhalt: 123A456B DVD-Player 49.95
Schlüssel: ID, Wert: 123A456B
Schlüssel: PRODUCT, Wert: DVD-Player
Schlüssel: PREIS, Wert: 49.95
aber auch an am
bei bis bin bald
das der die den dem des

Abbruch der While-Schleife: Break / Exit

Die PHP While-Schleife kann auch vorzeitig – etwa, wenn bestimmte Randbedingungen gegeben sind – abgebrochen werden. Dies geschieht mittels der break-Anweisung. Break nimmt einen optionalen Paramter entgegen, der per Default mit 1 belegt ist, und die Anzahl der Schleifenstufen festlegt, die beendet werden sollen. Dabei ist break nur für verschachtelte Schleifenebenen, die durch die Schleifentypen for, foreach, while, do-while oder switch eingeleitet wurden, einsetzbar. Nicht zum Abbruch von Schleifen geeignet ist dagegen die exit-Anweisung. Mit der exit-Anweisung würde gleich die Verarbeitung des gesamten Scripts beendet und nicht nur die Verarbeitung einer oder mehrerer verschachtelter Schleifen.

<?php
    // Variable i initialisieren
    $i = 1;
    // Ergebnisse in einer Tabelle ausgeben (HTML-Code für die Tabelle)
    echo '<table>';
    // Solange i kleiner als 10 ist soll der Anweisungsblock des
    // While-Schleifenkörpers ausgeführt werden.
    while ($i < 10) {
        // Zähler j jedesmal zurücksetzen
        $j = 1;
        // Tabellenreihe mit dem entsprechenden HTML-Code beginnen
        echo '<tr>';
        while ($j < 10) {
            if ($i * $j > 50)
                // Ausgabe beenden, wenn das Produkt beider
                // Zählervariablen über 50 liegt. Hier werden
                // beide While-Schleifen abgebrochen.
                break 2;
            else if ($i % 2 == 0)
                // Innere While-Schleife abbrechen, wenn die
                // Variable i einen geraden Wert enthält. Damit
                // wird nur dann das Produkt von i und j ausgegeben,
                // wenn i im Schleifendurchgang gerade ist.
                break;
            else
                // Ausgabe eines Wertes in einer Tabellenzelle,
                // deren Inhalt zentriert dargestellt wird.
                echo '<td align="center">' . $i * $j . '</td>';
            // Nächste Spalte
            $j++;
        }
        // Tabellenzeile abschließen
        echo '</tr>';
        // Nächste Zeile
        $i++;
    }
    // Tabelle nach Beendigung der Schleife schließen
    echo '</table>';
?>
123456789
369121518212427
51015202530354045
7142128354249

¬ Tutorials



¬ Insolvenzrecht