De continue instructie in PHP
Naast de instructie break, die de
werking van de lus beëindigt, bestaat er ook de instructie
continue, die een nieuwe iteratie
van de lus start. Deze instructie kan soms
nuttig zijn om de code te vereenvoudigen, hoewel
de taak bijna altijd ook zonder kan worden opgelost. Laten we
kijken naar een praktisch voorbeeld.
Stel, we hebben een array met nummers. Laten we
deze door een lus halen en de nummers die deelbaar zijn
door 2, kwadrateren en uitprinten
naar het scherm, en de nummers die deelbaar zijn door 3,
tot de derde macht verheffen en uitprinten naar het scherm.
Hier is de oplossing voor de beschreven taak:
<?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;
}
}
?>
Zoals je ziet, wordt de regel echo $res
twee keer herhaald. Laten we deze er
uit halen, buiten de if, zoals hier:
<?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; // heeft de uitvoer buiten de voorwaarde geplaatst
}
?>
Ons script werkt nu echter een beetje
anders: het blijkt dat ook voor gewone elementen,
die niet via onze if zijn verwerkt,
de uitvoer van de variabele $res
naar het scherm wordt uitgevoerd, wat volgens de voorwaarden van onze taak niet
onze bedoeling is.
Laten we het probleem oplossen door aan onze if
een extra voorwaarde else toe te voegen,
die wordt geactiveerd
voor elementen die niet deelbaar zijn door 2 en
3, en daar roepen we de instructie continue aan,
die ons onmiddellijk zal overbrengen
naar een nieuwe iteratie van de lus:
<?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; // gaat naar een nieuwe iteratie van de lus
}
echo $res; // wordt uitgevoerd als deelbaar door 2 of 3
}
?>
Schrijf een lus die alleen
even getallen weergeeft
van 1 tot 100,
en oneven getallen overslaat met behulp van continue.