Continue-käsky PHP:ssä
break-käskyn lisäksi, joka päättää
silmukan suorituksen, on olemassa myös
continue-käsky, joka käynnistää silmukan
uuden iteraation. Tämä käsky voi joskus olla
hyödyllinen koodin yksinkertaistamiseen, vaikka
käytännössä ongelma voidaan melkein aina ratkaista
ilman sitä. Katsotaanpa käytännön esimerkkiä.
Olkoon meillä taulukko numeroita. Käydään se
läpi silmukalla ja numerot, jotka ovat jaollisia
2:lla, korotetaan neliöön ja tulostetaan
näytölle, ja numerot, jotka ovat jaollisia
3:lla, korotetaan kuutioon ja tulostetaan
näytölle.
Tässä on kuvatun ongelman ratkaisu:
<?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;
}
}
?>
Kuten näet, rivi echo $res
toistuu kahdesti. Siirretään se
if-lauseen ulkopuolelle, näin:
<?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; // siirretty tulostus ehdon ulkopuolelle
}
?>
Nyt kuitenkin skriptimme toimii hieman
erilailla: käy niin, että myös tavallisille
alkioille, joita ei käsitelty if-lauseellamme,
suoritetaan muuttujan $res
tulostus näytölle, mikä tehtävämme ehtojen mukaan ei
ole tarpeen.
Korjataan ongelma lisäämällä if-lauseeseemme
else-ehdon, joka aktivioituu
alkioille, jotka eivät ole jaollisia 2:lla
ja 3:lla, ja kutsutaan siellä
continue-käskyä,
joka heti siirtää meidät
silmukan seuraavalle iteraatiolle:
<?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; // siirrytään silmukan seuraavalle iteraatiolle
}
echo $res; // suoritetaan, jos jaollinen 2:lla tai 3:lla
}
?>
Kirjoita silmukka, joka tulostaa vain
parilliset numerot 1:stä 100:een,
ohittaen parittomat käyttämällä continue-käskyä.