PHPでウェブの世界と繋がろう!
menu
ホーム > PHPの文法 > 6 制御文 > 6-12 break 文

6-12 break 文

Pocket

- 1 分ノート ! -

  • break文は現在実行している処理を終了して制御構造から抜ける
    break;
    
  • break文は引数でループ構造を抜けるレベルを指定できる
    break 2;
    
  • break文はswitch文をループ構造と判断する

break文とは
POINT

  • break文は現在実行している処理を終了して制御構造から抜ける
    break;
    
  • break文は引数でループ構造を抜けるレベルを指定できる
    break 2;
    
  • break文はswitch文をループ構造と判断する

break文は現在実行している処理を終了して制御構造から抜けます。「for文」「foreach文」「while文」「do~while文」「switch文」で使用できます。

以下の例では、「if($i === 5)」の場合に「break;」が実行され、其の時点で処理が終了し、while文の制御構造から抜けています。本来は、数値の 1 から 10 までをechoで出力するループ処理ですが、1~4までしか出力されません。

$i = 1;
while($i <= 10){
	if($i === 5)
	break;

	echo $i."<br/>\n";
	$i++;
}

結果は

1
2
3
4

となります。

break文は、オプションで引数を指定することができ、ループ構造を抜けるレベルの数を指定できます。for文やwhile文等でそれらが入れ子(ネスト)になっている場合は、ループ構造が階層化されているので、何階層のループ構造を抜けるかレベルを指定できます。何も指定しない状態は「break 1;」と同意です。これは、現在のループ(反復)処理を終了させます。

以下の例では、for文によるループ処理を記述していますが、for文の中にfor文を記述した入れ子(ネスト)構造になっています。出力内容は10の位から90の位までの数値を並べて表示するものですが、50の位までで処理を終了しています。これは、「if($i === 50 && $ii === 9)」の場合に、「break 2;」 が実行され、ループ構造を2つ抜けているためです。そのため、現在のループの最初である、「for($ii = 0; $ii <= 9; $ii++)」の更に上の階層である、「for($i = 10; $i <= 90; $i+=10)」までのループ構造を抜けて処理を終了します。

for($i = 10; $i <= 90; $i+=10){
	echo $i.'の位 ( ';
	for($ii = 0; $ii <= 9; $ii++){
		if($i === 50 && $ii === 9){
			echo $i+$ii." )<br/>\n";
			break 2;//2階層のループを抜けます
		}
		echo $i+$ii.' ';
	}
	echo ")<br/>\n";
}

結果は

10の位 ( 10 11 12 13 14 15 16 17 18 19 )
20の位 ( 20 21 22 23 24 25 26 27 28 29 )
30の位 ( 30 31 32 33 34 35 36 37 38 39 )
40の位 ( 40 41 42 43 44 45 46 47 48 49 )
50の位 ( 50 51 52 53 54 55 56 57 58 59 )

となります。

※バージョン:5.4.0 からbreak 0; が使えなくなりました。今までのバージョンでは、これは break 1; と同じ意味に解釈されていました。
※バージョン:5.4.0 から数値引数の部分に変数を渡すこと (例: $num = 2; break $num;) ができなくなりました。

使用例
 

for文でbreak文
for($i = 1; $i <= 10; $i++){
	if($i === 5)
	break;

	echo $i."<br/>\n";
}

結果は

1
2
3
4

となります。

while文でbreak文
$i = 1;
while($i <= 10){
	if($i === 5)
	break;

	echo $i."<br/>\n";

	$i++;
}

結果は

1
2
3
4

となります。

do~while文でbreak文
$i = 1;
do{
	if($i === 5)
	break;

	echo $i."<br/>\n";

	$i++;
}while($i <= 10);
&#91;/PHP&#93;
結果は
<div id="txtBoxLmnBgBrw1Br1">
<strong>1
2
3
4</strong>
</div>
となります。

</div>


<h6>foreach文でbreak文</h6>
<div id="txtBoxLms">
[PHP ruler="true" toolbar="true"]
$a = array(1,2,3,4,5,6,7,8,9,10);
foreach($a as $i){
	if($i === 5)
	break;

	echo $i."<br/>\n";
}

結果は

1
2
3
4

となります。

switch文でbreak文
$sName = 'Saitou';
switch($sName){

	case 'Saitou' :
	echo '名前はSatoです。';
	break;

	case 'Suzuki' :
	echo '名前はSuzukiです。';
	break;

	case 'Yamada' :
	echo '名前はYamadaです。';
	break;

}

結果は

名前はSatoです。

となります。

while文入れ子(ネスト)でbreak文
$i = 1;
while($i <= 10){
	echo $i.' ';

	echo '( ';
	$j = 1;
	while($j <= 3){
		echo $i.'-'.$j.' ';
		$j++;

		//if文でbreak 2;を実行
		if($i === 5 && $j === 3){
			echo $i.'-'.$j.' )';
			break 2;
		}

	}
	echo ')';

	echo "<br/>\n";
	$i++;
}

結果は

1 ( 1-1 1-2 1-3 )
2 ( 2-1 2-2 2-3 )
3 ( 3-1 3-2 3-3 )
4 ( 4-1 4-2 4-3 )
5 ( 5-1 5-2 5-3 )

となります。

for文入れ子(ネスト)でbreak文
for($i = 10; $i <= 90; $i+=10){
	echo $i.'の位 ( ';
	for($ii = 0; $ii <= 9; $ii++){
		if($i === 50 && $ii === 9){
			echo $i+$ii." )<br/>\n";
			break 2;//2階層のループを抜けます
		}
		echo $i+$ii.' ';
	}
	echo ")<br/>\n";
}

結果は

10の位 ( 10 11 12 13 14 15 16 17 18 19 )
20の位 ( 20 21 22 23 24 25 26 27 28 29 )
30の位 ( 30 31 32 33 34 35 36 37 38 39 )
40の位 ( 40 41 42 43 44 45 46 47 48 49 )
50の位 ( 50 51 52 53 54 55 56 57 58 59 )
10の位 ( 10 11 12 13 14 15 16 17 18 19 )
20の位 ( 20 21 22 23 24 25 26 27 28 29 )
30の位 ( 30 31 32 33 34 35 36 37 38 39 )
40の位 ( 40 41 42 43 44 45 46 47 48 49 )
50の位 ( 50 51 52 53 54 55 56 57 58 59 )

となります。

サンプルコード

– サンプル Click Here ! –

<h3>for文でbreak文</h3>
<?php
for($i = 1; $i <= 10; $i++){
	if($i === 5)
	break;

	echo $i."<br/>\n";
}
?>

<h3>while文でbreak文</h3>
<?php
$i = 1;
while($i <= 10){
	if($i === 5)
	break;

	echo $i."<br/>\n";

	$i++;
}
?>

<h3>do~while文でbreak文</h3>
<?php
$i = 1;
do{
	if($i === 5)
	break;

	echo $i."<br/>\n";

	$i++;
}while($i <= 10);

?>

<h3>foreach文でbreak文</h3>
<?php
$a = array(1,2,3,4,5,6,7,8,9,10);
foreach($a as $i){
	if($i === 5)
	break;

	echo $i."<br/>\n";
}

?>

<h3>switch文でbreak文</h3>
<?php
$sName = 'Saitou';
switch($sName){

	case 'Saitou' :
	echo '名前はSatoです。';
	break;

	case 'Suzuki' :
	echo '名前はSuzukiです。';
	break;

	case 'Yamada' :
	echo '名前はYamadaです。';
	break;

}
?>

<h3>while文入れ子(ネスト)でbreak文</h3>
<?php
$i = 1;
while($i <= 10){
	echo $i.' ';

	echo '( ';
	$j = 1;
	while($j <= 3){
		echo $i.'-'.$j.' ';
		$j++;

		//if文でbreak 2;を実行
		if($i === 5 && $j === 3){
			echo $i.'-'.$j.' )';
			break 2;
		}

	}
	echo ')';

	echo "<br/>\n";
	$i++;
}
?>

<h3>for文入れ子(ネスト)でbreak文</h3>
<?php
for($i = 10; $i <= 90; $i+=10){
	echo $i.'の位 ( ';
	for($ii = 0; $ii <= 9; $ii++){
		if($i === 50 && $ii === 9){
			echo $i+$ii." )<br/>\n";
			break 2;//2階層のループを抜けます
		}
		echo $i+$ii.' ';
	}
	echo ")<br/>\n";
}
?>
実行結果
for文でbreak文
1
2
3
4

while文でbreak文
1
2
3
4

do~while文でbreak文
1
2
3
4

foreach文でbreak文
1
2
3
4

switch文でbreak文
名前はSatoです。

while文入れ子(ネスト)でbreak文
1 ( 1-1 1-2 1-3 )
2 ( 2-1 2-2 2-3 )
3 ( 3-1 3-2 3-3 )
4 ( 4-1 4-2 4-3 )
5 ( 5-1 5-2 5-3 )

for文入れ子(ネスト)でbreak文
10の位 ( 10 11 12 13 14 15 16 17 18 19 )
20の位 ( 20 21 22 23 24 25 26 27 28 29 )
30の位 ( 30 31 32 33 34 35 36 37 38 39 )
40の位 ( 40 41 42 43 44 45 46 47 48 49 )
50の位 ( 50 51 52 53 54 55 56 57 58 59 )
10の位 ( 10 11 12 13 14 15 16 17 18 19 )
20の位 ( 20 21 22 23 24 25 26 27 28 29 )
30の位 ( 30 31 32 33 34 35 36 37 38 39 )
40の位 ( 40 41 42 43 44 45 46 47 48 49 )
50の位 ( 50 51 52 53 54 55 56 57 58 59 )

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

投稿日:2011年11月6日
最終更新日:2014年02月20日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpref-structures_break/trackback/