Continue-instruktionen i PHP
Udover instruktionen break, der afslutter
et loops udførelse, findes der også instruktionen
continue, der starter en ny iteration af
looppet. Denne instruktion kan undertiden være
nyttig til at forenkle koden, selvom opgaven næsten
altid kan løses uden den. Lad os se på et praktisk
eksempel.
Lad os sige, at vi har en række tal. Lad os
gennemgå dem med en løkke, og for de tal, der er delelige
med 2, vil vi opløfte dem til anden potens og vise
dem på skærmen, og for de tal, der er delelige med 3,
vil vi opløfte dem til tredje potens og vise dem på skærmen.
Her er løsningen på den beskrevne opgave:
<?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;
}
}
?>
Som du kan se, gentages linjen echo $res
to gange. Lad os flytte den uden for if,
sådan her:
<?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; // flyttet visningen ud af betingelsen
}
?>
Men nu fungerer vores script dog en smule
anderledes: det vil vise sig, at også for almindelige elementer,
der ikke blev behandlet gennem vores if, vil
udskrivningen af variablen $res
blive udført, hvilket ifølge betingelsen i vores opgave ikke er
ønsket.
Lad os rette problemet ved at tilføje en else
betningelse til vores if, som vil udløses
for elementer, der ikke er delelige med 2 og
3, og vi vil kalde instruktionen continue der,
som straks vil sende os videre
til den næste iteration af løkken:
<?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; // går videre til næste iteration af løkken
}
echo $res; // udføres, hvis delelig med 2 eller 3
}
?>
Skriv en løkke, som kun viser
lige tal fra 1 til 100,
og springer de ulige tal over ved hjælp af continue.