Jetzt anmelden...

Login
Passwort
Registrieren

PHP Blog

break und continue in verschachteteln Schleifen

break und continue sind praktisch zur Schleifensteuerung. Aber wie sieht es damit bei verschachtelten Schleifen aus?

Kommentare [0]

Stefan 04.08.2019

Infos zum Artikel

Kategorie PHP
Autor Stefan
Datum 04.08.2019

Thema in Kurzform

PHP break continue schleifen

Funktion von break und continue

Was break und continue in einfachen Schleifenkonstruktionen bewirken, sehen wir hier:

Beispiel für break in einer Schleife:

for($i = 1; $i <= 3; $i++){
    if($i == 2){
        break;
    }
    echo "$i ";
}
// Output: 1

Beispiel für continue in einer Schleife:

for($i = 1; $i <= 3; $i++){
    if($i == 2){
        continue;
    }
    echo "$i ";
}
// Output: 1 3

Während also break die gesamte Schleife abbricht, beendet continue den aktuellen Schleifendurchlauf und springt zum nächsten.

Kalter Kaffee. Wie sieht das aber bei verschachtelten Schleifen aus?

break und continue bei verschachtelten Schleifen

Sehen wir uns hierzu erst einmal eine verschachtelte for-Schleife ohne break/ continue an:

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        echo $i . " " . $y . "<br>";
    }
}

Der Output ist:

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

break und continue in der inneren Schleife

Jetzt bauen wir in der inneren Schleife eine break-Anweisung ein, die ausgeführt wird, wenn $y == 2 true ist:

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        if($y == 2){
            break;
        }
        echo $i . " " . $y . "<br>";
    }
}

Wie zu erwarten, bricht break die innere Schleife bei $y == 2 komplett ab und es beginnt der nächste Durchlauf der äußeren Schleife. Die innere Schleife kommt damit immer nur bis zum $y-Wert von 2 (wobei 2 schon nicht mehr ausgegeben wird). Der Output lautet entsprechend:

1 1
2 1
3 1

Dieselbe Schleifenkonstruktion nun mit einem continue in der inneren Schleife:

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        if($y == 2){
            continue;
        }
        echo $i . " " . $y . "<br>";
    }
}

Nun bricht die innere Schleife nicht mehr komplett ab, sondern beendet nur den aktuellen inneren Schleifendurchlauf. Die innere Schleife läuft also beim $y-Wert von 3 weiter. Der Output lautet:

1 1
1 3
2 1
2 3
3 1
3 3

break 2 und continue 2

Wenn wir von der inneren Schleife aus die umgebende äußere Schleife steuern wollen, schreiben wir hinter break bzw. continue die Zahl 2:

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        if($y == 2){
            break 2;
        }
        echo $i . " " . $y . "<br>";
    }
}

Wenn die Schleifenvariable der inneren Schleife $y den Wert 2 hat, beendet break 2 sofort die äußere Schleife. Damit ist auch das komplette Schleifenkonstrukt beendet und der Output lautet:

1 1

Setzen wir in der inneren Schleife continue 2 ein, wird stets der aktuelle äußere Schleifendurlauf beendet.

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        if($y == 2){
            continue 2;
        }
        echo $i . " " . $y . "<br>";
    }
}

Output:

1 1
2 1
3 1

break 3 und continue 3

In dreidimensionalen Schleifen kann man sogar break 3 bzw. continue 3 einsetzen, um von der innersten Schleife die äußerste zu steuern. Hier ein Beispiel mit break 3:

for($i = 1; $i <= 3; $i++){
    for($y = 1; $y <= 3; $y++){
        for($z = 1; $z <= 3; $z++){
            if($z == 2){
                break 3;
            }
            echo $i . " " . $y . " " . $z . "<br>";
        }
    }
}

Ergebnis:

1 1 1

Weiter wollen wir es hier nicht treiben 😀

Habt Ihr noch Fragen zu diesem Thema? Dann schreibt einfach in die Kommentare.

Kommentar schreiben

Nur angemeldete und aktivierte Benutzer können kommentieren.

Alle Kommentare

Es gibt bislang noch keine Kommentare zu diesem Thema.

Funktionen für Arrays

Für das Handling von Arrays gibt es mehrere nützliche Funktionen.

Verzweigungen

Ohne Verzweigungen wäre kaum ein sinnvolles Programm möglich.

Typhinweise in PHP

Seit der PHP Version 7 ist es möglich, Parameter und Rückgabewerte strikt zu kontrollieren.

FALCONBYTE.NET

Handmade with 🖤️

© 2018, 2019 Stefan E. Heller

Impressum | Datenschutz

facebook programmieren lernen twitter programmieren lernen youtube programmieren lernen