PHPにおけるcontinue文
ループの作業を終了するbreak文の他に、
ループの新しい反復を開始するcontinue文も存在します。
この文はコードを簡略化するのに便利なことがありますが、
ほとんどの場合、これを使わなくても問題を解決できます。
実際の例を見てみましょう。
数値の配列があるとします。ループで配列を繰り返し処理し、
2で割り切れる数値は2乗して画面に表示し、
3で割り切れる数値は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が2回繰り返されています。
これを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の画面表示が実行されてしまい、
このタスクの条件では必要とされていません。
この問題を修正するために、ifに
2と3で割り切れない要素に対して作動する
else条件を追加し、そこで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で割り切れる場合に実行
}
?>
continueを使って奇数をスキップしながら、
1から100までの偶数のみを表示するループを書いてください。