通常、ループを途中で抜ける場合breakを使うが、ループの中にループがあるような多重ループを抜けるには、C言語ならgotoを使ったり、Javaならラベル指定付きbreakを使ったりと特殊な方法を使うこともある。
PHPでは、goto文もラベル指定付きbreak文もサポートされていないので、変数を用意して2回breakしなければならいと思っている人も意外といるが、PHPではbreak 2;というように値を指定して多重ループを抜けることができる。
(※PHP6からはgoto文がサポートされるらしい。)
例えば、以下のように変数を使って2回breakしているコードがあるとする。
<?php
$break_flag = false; //多重ループから抜けるためのフラグ
for($i = 0; $i<5; $i++){
for($j=0; $j<5; $j++){
echo "({$i}, {$j})<br>\n";
if($i == 2 && $j == 4){
$break_flag = true;
break;
}
}
if($break_flag)
break;
}
?>
このコードは以下のように書くことができる。
<?php
for($i = 0; $i<5; $i++){
for($j=0; $j<5; $j++){
echo "({$i}, {$j})<br>\n";
if($i == 2 && $j == 4){
break 2;
}
}
}
?>
breakで値が指定できるように、continue文でも指定することができる。
<?php
for($i = 0; $i<5; $i++){
for($j=0; $j<5; $j++){
echo "({$i}, {$j})<br>\n";
if($j == 2){
continue 2;
}
}
}
?>
このコードを実行すると以下のようになる。
(0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2) (3, 0) (3, 1) (3, 2) (4, 0) (4, 1) (4, 2)
これはbreak 1;やcontinue 3;など2以外の値でもできる。