PHP入門 ループの制御(breack、continue)
while/do~while、for/foreach命令では、あらかじめ決められた終了条件を満たしたタイミングでグループを終了します。しかし、処理によっては、特定の条件を満たしたところで強制的にグループを中断したい、あるいは、特定の周回だけをスキップしたい場合があります。そのような場合は、breack命令やcontinue命令を使用します。
breack命令
breack命令は、現在のループを強制的に中断する命令です。一般的にfor/foreach、while/do~while命令の中で利用します。
例:1~100の値を加算していき、合計値が1000を超えたところでループを抜けます。
<?php
$sum = 0;
for($i = 1; $i <= 100; $i++){
$sum += $i;
if ($sum > 1000){ break; }
}
print "合計が1000を超えるのは、1~{$i}を加算したときです。";
continue命令
ループそのものを完全に抜けてしまうbreack命令に対して、現在の周回だけをスキップし、ループそのものは継続して実行するのが、continue命令です。
例:1~100の範囲で偶数値のみを加算し、その合計値を求めるサンプルです。
<?php
$sum = 0;
for($i = 1; $i <= 100; $i++){
if ($i % 2 !== 0){ continue; }
$sum += $i;
}
print "合計値は{$sum}です。";
入れ子のループを中断/スキップする
制御命令はお互いに入れ子(ネスト)にできます。ネストされたループの中で、break/continue命令を使用した場合、既定では最も内側のループを抜け/スキップします。
例:九九表を作成する
変数$resultが40を超えたところで、break命令を実行しています。これによって内側のループを脱出するので、結果として、積が40以下である九九表を出力できるわけです。
<?php
for($i = 1; $i < 10; $i++){
for($j = 1; $j < 10; $j++){
$result = $i * $j;
if ($result > 40){break;}
print "{$result} ";
}
print '<br />';
}
一度でも積が40を超えたら九九表の出力自体を停止したい場合、次のようにします。
if ($result > 40){break 2;}
このように、breack命令の末尾に抜けるループの階層を指定します。ここでは2を指定しているので、内側/外側の二重ループをまとめて抜けます。
構文:breack/continue命令
breack ループ階層数
continue ループ階層数
switchブロック配下のcontinue命令
switchブロックの中では、continue命令はbreak命令と同じように動作します。
<?php
for($i = 1; $i < 4; $i++){
$result = 0;
switch ($i){
case 1:
case 3:
$result = $i * $i;
break;
case 2:
continue;
}
print "{$i}の2乗は{$result}です。<br />";
}
switch命令の中でのcontinue命令はbreack命令と同じように動作するので、「case 2:」ブロックは何もせずにswitch命令を抜けるだけで、直後のprint命令を実行してします。「$i = 2」の周回をスキップさせたい場合には、「continue 2;」のようにします。これでswitch、forのネストされた「ループ」をスキップします。