通常、ループを途中で抜ける場合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以外の値でもできる。