Instrukcja continue w PHP
Oprócz instrukcji break, która kończy
działanie pętli, istnieje również instrukcja
continue, która uruchamia nową iterację
pętli. Instrukcja ta może czasami być przydatna
dla uproszczenia kodu, chociaż prawie zawsze
zadanie można rozwiązać również bez niej. Spójrzmy
na praktyczny przykład.
Załóżmy, że mamy daną tablicę z liczbami. Przejdźmy
ją pętlą i liczby, które dzielą się przez
2, podnieśmy do kwadratu i wypiszmy
na ekran, a liczby, które dzielą się przez 3,
podnieśmy do sześcianu i wypiszmy na ekran.
Oto rozwiązanie opisanego zadania:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
echo $res;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
echo $res;
}
}
?>
Jak widzisz, linijka echo $res
powtarza się dwa razy. Przenieśmy ją
poza if, w ten sposób:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
}
echo $res; // przenieśliśmy wyświetlanie poza warunek
}
?>
Teraz jednak nasz skrypt działa nieco
inaczej: okaże się, że również dla zwykłych elementów,
nieprzetworzonych przez nasz if, będzie
wykonywane wyświetlanie zmiennej $res
na ekran, co zgodnie z warunkami naszego zadania nam
nie jest potrzebne.
Poprawmy problem, dodając do naszego if
jeszcze warunek else, który będzie się uruchamiać
dla elementów nie dzielących się przez 2 i
3, i wywołajmy tam instrukcję continue,
która natychmiast przeniesie nas
do nowej iteracji pętli:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
} else {
continue; // przejdziemy do nowej iteracji pętli
}
echo $res; // wykona się, jeśli dzieli się przez 2 lub 3
}
?>
Napisz pętlę, która wyświetla tylko
liczby parzyste od 1 do 100,
pomijając nieparzyste za pomocą continue.