UPDATE:2018年11月06日
PHP break 文 現在実行しているループ処理を抜ける
1 Minute Note
- break文 は現在実行しているfor文、foreach文、while文、do-while文、switch文の処理を終了して制御構造から抜ける
break;
- break文 は引数でループ構造を抜けるレベルを指定できる
break 2;
- break文 は switch文 をループ構造と判断する
break文とは
- break文 は現在実行している処理を終了して制御構造から抜ける
break;
- break文 は引数でループ構造を抜けるレベルを指定できる
break 2;
- break文 は switch文 をループ構造と判断する
break文は現在実行している処理を終了して制御構造から抜けます。「for文」「foreach文」「while文」「do~while文」「switch文」で使用できます。
以下の例では、「if($i === 5)」の場合に「break;」が実行され、其の時点で処理が終了し、while文の制御構造から抜けています。本来は、数値の 1 から 10 までをechoで出力するループ処理ですが、1~4までしか出力されません。
1 2 3 4 5 6 7 8 9 10 11 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ if($i === 5) break; echo $i."<br>\n"; $i++; } ?> |
結果は
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)」までのループ構造を抜けて処理を終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- サンプルコード --> <?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"; } ?> |
結果は
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文
1 2 3 4 5 6 7 8 9 | <!-- サンプルコード --> <?php for($i = 1; $i <= 10; $i++){ if($i === 5) break; echo $i."<br>\n"; } ?> |
結果は
2
3
4
となります。
while文でbreak文
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ if($i === 5) break; echo $i."<br>\n"; $i++; } ?> |
結果は
2
3
4
となります。
do~while文でbreak文
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php $i = 1; do{ if($i === 5) break; echo $i."<br>\n"; $i++; }while($i <= 10); ?> |
結果は
2
3
4
となります。
foreach文でbreak文
1 2 3 4 5 6 7 8 9 10 | <!-- サンプルコード --> <?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"; } ?> |
結果は
2
3
4
となります。
switch文でbreak文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!-- サンプルコード --> <?php $sName = 'Saitou'; switch($sName){ case 'Saitou' : echo '名前はSatoです。'; break; case 'Suzuki' : echo '名前はSuzukiです。'; break; case 'Yamada' : echo '名前はYamadaです。'; break; } ?> |
結果は
となります。
while文入れ子(ネスト)でbreak文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!-- サンプルコード --> <?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++; } ?> |
結果は
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文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- サンプルコード --> <?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"; } ?> |
結果は
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 )
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | <!-- サンプルコード --> <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"; } ?> |
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 )
タグ(=記事関連ワード)
日付
最終更新日:2018年11月06日