[PHP] Jak przerwać wykonywanie pętli (for, foreach, while, do...while)?
Chcesz przerwać wykonywanie pętli (for, foreach, while, do...while) aby bez oczekiwania na skończenie iteracji wykonać kolejne polecenia programu. Może to znacznie przyśpieszyć działanie skryptu.
Wszędzie tam, gdzie w pętli będziesz sprawdzać jakieś warunki, z pewnością przyda Ci się metoda aby z pętli wyjść szybciej niż skończy się ona wykonywać w naturalny sposób.
PHP pozwala przerywać pętle aby wychodzić z nich natychmiast i wykonywać dalszą część programu. Można nie tylko wyjść z pętli aktualnej, ale również z pętli zagnieżdżonych, gdy jest ich więcej. Zobacz jak to zrobić.
<?
for ($i=1;$i<=100;$i++) {
echo "test ";
if ($i==5) break;
}
?>
Napis "test" pojawi się dokładnie 5 razy. Mimo tego, że pętla przewiduje 100 iteracji, wyjdziemy już po piątej za pomocą polecenia break.
Oczywiście przykład jest prosty i od razu można założyć, że pętla ma mieć tylko pięć przebiegów. W pętlach while również można zbudować warunek, który sprawdzi kiedy pętla powinna być przerwana. Ale są sytuacje gdy ilość tych warunków byłaby duża i wygodniej sprawdzić je w pętli, aby natychmiast z niej uciec. Szczególnie gdy pętli jest wiele.
Przerwanie pętli to nieraz ogromne oszczędności. Zamiast kilkudziesięciu tysięcy iteracji w dużych pętlach, może ona zostać przerwana już po kilkuset przebiegach. Program nie traci czasu na wykonywanie tych samych fragmentów kodu gdy nie jest to już konieczne.
Polecenie break można wywołać także z liczbą określającą z ilu pętli chcemy uciec i przejść dalej. W poniższym przykładzie wychodzimy z dwóch pętli, więc po break podajemy liczbę 2.
<?
while ($i<1000) {
for ($i=1;$i<100;$i++) {
echo "test ";
if ($i==5) break 2;
}
}
?>
Wynik jest identyczny - pięć napisów "test". Gdyby po break nie było liczby 2, wtedy pętla while trwałaby nieprzerwanie i wypisywała wciąż napis "test" na ekranie.
<?
$t[]=7;
$t[]=2;
$t[]=3;
$t[]=4;
$t[]=8;
$t[]=6;
$t[]=1;
$t[]=5;
$t[]=9;
for ($i=0;$i<count($t);$i++) {
if ($t[$i]==3) {echo $i; break;}
}
?>
Programik jest prosty, ale dobrze pokazuje sens stosowania polecenia break. Chcemy dowiedzieć się, w którym elemencie tablicy znajduje się cyfra 3 (zakładając, że numery nie powtarzają się). Pętla for jest wygodna to przejścia przez całą tablicę, więc po kolei sprawdzamy czy kolejny element nie zawiera liczby 3.
Gdy tylko wystąpi trójka wypisujemy na ekran numer określający element tablicy z cyfrą 3. Dalsze przeszukiwanie tablicy nie ma już sensu, więc czym prędzej pętlę opuszczamy za pomocą break aby zaoszczędzieć na niepotrzebnym już przechodzeniu przez dalsze porównania w kolejnych iteracjach.