Дастури continue дар PHP
Ғайр аз дастури break, ки кори ҳалқаро қатъ мекунад,
дастури continue низ мавҷуд аст,
ки такрори нави ҳалқаро оғоз мекунад. Ин дастур
баъзан метавонад барои содда кардани рамз муфид бошад,
гарчанде ки амалан ҳама вазифаро бидуни он ҳал кардан мумкин аст.
Биёед ба мисоли амалӣ нигарем.
Фарз мекунем, ки мо массиви ададҳо дорем. Биёед онро бо ҳалқа такрор кунем ва ададҳоеро,
ки ба 2 тақсим мешаванд, ба квадрат бардорем ва ба экран чоп кунем,
ва ададҳоеро, ки ба 3 тақсим мешаванд,
ба куб бардорем ва ба экран чоп кунем.
Ҳалли вазифаи тавсифшуда ин аст:
<?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;
}
}
?>
Чунон ки шумо мебинед, сатри echo $res
ду маротиба такрор мешавад. Биёед онро берун аз
if гирем, ба ин шакл:
<?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; // хориҷ кардани чоп аз шарт
}
?>
Акнун скрипти мо, аммо, каме гунҷон кор мекунад:
маълум мешавад, ки ҳатто барои унсурҳои оддӣ,
ки тавассути if-и мо коркард нашудаанд,
чопи тағирёбандаи $res
ба экран иҷро мешавад, ки мувофиқи шарти вазифаи мо ба он
лоzim нест.
Мушкилиро ислоҳ мекунем, ба if-и худ
як шарти дигар else илова мекунем, ки барои
унсурҳое, ки ба 2 ва
3 тақсим намешаванд, фаъол шавад,
ва дар он ҷо дастури continue-ро даъват мекунем,
ки фавран моро ба такрори нави ҳалқа мегузаронад:
<?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; // ба такрори нави ҳалқа мегузарем
}
echo $res; // иҷро мешавад, агар ба 2 ё 3 тақсим шавад
}
?>
Ҳалқае нависед, ки фақат ададҳои
ҷуфти аз 1 то 100-ро чоп мекунад,
ададҳои тоқро бо истифода аз continue гузаронида.