UPDATE:2018年11月06日
PHP continue 文 以降のループ処理を飛ばして条件式に戻る
1 Minute Note
- continue文 はループ処理中に以降の文を飛ばして条件式の評価を経てループ処理の最初に戻る
continue;
- continue文 は引数でループ構造を抜けるレベルを指定できる
continue 2;
- continue文 は switch文 をループ構造と判断する
continue文とは
- continue文 はループ処理中に以降の文を飛ばして条件式の評価を経てループ処理の最初に戻る
continue;
- continue文 は引数でループ構造を抜けるレベルを指定できる
continue 2;
- continue文 は switch文 をループ構造と判断する
continue文は、ループ(反復)処理中に continue; が実行された以降の 文 を飛ばして、条件式の評価を経て、繰り返しの最初に戻るための制御文です。PHPでループ(反復)処理を行う制御文は、for文、while文、do~while文、foreach文です。また、continue文はswitch文をループ構造と判断します。
以下の例では、 「if($i === 5)」 の場合に 「continue;」 が実行され、それ以降の文である、「echo "$i<br>\n";」が実行されずに飛ばされています。そのため、本来は、数値の 1 から 10 までをechoで出力するループ処理ですが、5 のみ出力されません。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php for($i = 1; $i <= 10; $i++){ if($i === 5) continue; echo "$i<br>\n"; } ?> |
結果は
2
3
4
6
7
8
9
10
となります。
continue文は、オプションで引数を指定することができ、ループ構造を抜けるレベルの数を指定できます。for文やwhile文等でそれらが入れ子(ネスト)になっている場合は、ループ構造が階層化されているので、何階層のループ構造を抜けるかレベルを指定できます。何も指定しない状態は「continue 1;」と同意です。これは、現在のループ(反復)処理の最後まで飛ばします。
以下の例では、for文によるループ処理を記述していますが、for文の中にfor文を記述した入れ子(ネスト)構造になっています。出力内容は10の位から90の位までの数値を並べて表示するものですが、50の位だけ表示されません。これは、「if($i === 50)」の場合に、「continue 2;」 が実行され、ループ構造を2つ抜けているためです。そのため、現在のループの最初である、「for($ii = 0; $ii <= 9; $ii++)」の更に上の階層である、「for($i = 10; $i <= 90; $i+=10)」まで戻ります。また、「continue 2;」 以降の文である「echo $i+$ii.' ';」や「echo ")
\n";」などは、実行されません。
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){ echo ")<br>\n"; continue 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の位 ( )
60の位 ( 60 61 62 63 64 65 66 67 68 69 )
70の位 ( 70 71 72 73 74 75 76 77 78 79 )
80の位 ( 80 81 82 83 84 85 86 87 88 89 )
90の位 ( 90 91 92 93 94 95 96 97 98 99 )
となります。
文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコードのことです。
※バージョン:5.4.0 から continue 0; が使えなくなりました。今までのバージョンでは、これは continue 1; と同じ意味に解釈されていました。
※バージョン:5.4.0 から 数値引数の部分に変数を渡すこと (例: $num = 2; continue $num;) ができなくなりました。
使用例
for文でcontinue文
1 2 3 4 5 6 7 8 9 | <!-- サンプルコード --> <?php for($i = 1; $i <= 10; $i++){ if($i === 5) continue; echo $i."<br>\n"; } ?> |
結果は
2
3
4
6
7
8
9
10
となります。
while文でcontinue文
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --><?php $i = 1; while($i <= 10){ if($i === 5){ $i++; continue; } echo $i."<br>\n"; $i++; } ?> |
結果は
2
3
4
6
7
8
9
10
となります。
do~while文でcontinue文
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- サンプルコード --> <?php $i = 1; do{ if($i === 5){ $i++; continue; } echo $i."<br>\n"; $i++; }while($i <= 10); ?> |
結果は
2
3
4
6
7
8
9
10
となります。
foreach文でcontinue文
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) continue; echo $i."<br>\n"; } ?> |
結果は
2
3
4
6
7
8
9
10
となります。
while文入れ子(ネスト)でcontinue文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- サンプルコード --> <?php $i = 0; while($i++ < 5){//continueから3階層目 echo "{$i}-外<br>\n"; while(true){//continueから2階層目 echo "{$i}-中<br>\n"; while(true){//continueから1階層目 echo "{$i}-内<br>\n"; continue 3; } echo "{$i}-中 非表示<br>\n"; } echo "{$i}-外 非表示<br>\n"; } ?> |
結果は
1-中
1-内
2-外
2-中
2-内
3-外
3-中
3-内
4-外
4-中
4-内
5-外
5-中
5-内
となります。
for文入れ子(ネスト)でcontinue文
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){ echo ")<br>\n"; continue 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の位 ( )
60の位 ( 60 61 62 63 64 65 66 67 68 69 )
70の位 ( 70 71 72 73 74 75 76 77 78 79 )
80の位 ( 80 81 82 83 84 85 86 87 88 89 )
90の位 ( 90 91 92 93 94 95 96 97 98 99 )
となります。
サンプルコード
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 | <!-- サンプルコード --> <h3>for文でcontinue文</h3> <?php for($i = 1; $i <= 10; $i++){ if($i === 5) continue; echo $i."<br>\n"; } ?> <h3>while文でcontinue文</h3> <?php $i = 1; while($i <= 10){ if($i === 5){ $i++; continue; } echo $i."<br>\n"; $i++; } ?> <h3>do~while文でcontinue文</h3> <?php $i = 1; do{ if($i === 5){ $i++; continue; } echo $i."<br>\n"; $i++; }while($i <= 10); ?> <h3>foreach文でcontinue文</h3> <?php $a = array(1,2,3,4,5,6,7,8,9,10); foreach($a as $i){ if($i === 5) continue; echo $i."<br>\n"; } ?> <h3>for文入れ子(ネスト)でcontinue文 レベル指定 2階層</h3> <?php for($i = 10; $i <= 90; $i+=10){ echo $i.'の位 ( '; for($ii = 0; $ii <= 9; $ii++){ if($i === 50){ echo ")<br>\n"; continue 2; } echo $i+$ii.' '; } echo ")<br>\n"; } ?> <h3>while文入れ子(ネスト)でcontinue文 レベル指定 3階層</h3> <?php $i = 0; while($i++ < 5){//continueから3階層目 echo "{$i}-外<br>\n"; while(true){//continueから2階層目 echo "{$i}-中<br>\n"; while(true){//continueから1階層目 echo "{$i}-内<br>\n"; continue 3; } echo "{$i}-中 非表示<br>\n"; } echo "{$i}-外 非表示<br>\n"; } ?> |
1
2
3
4
6
7
8
9
10
while文でcontinue文
1
2
3
4
6
7
8
9
10
do~while文でcontinue文
1
2
3
4
6
7
8
9
10
foreach文でcontinue文
1
2
3
4
6
7
8
9
10
for文入れ子(ネスト)でcontinue文 レベル指定 2階層
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の位 ( )
60の位 ( 60 61 62 63 64 65 66 67 68 69 )
70の位 ( 70 71 72 73 74 75 76 77 78 79 )
80の位 ( 80 81 82 83 84 85 86 87 88 89 )
90の位 ( 90 91 92 93 94 95 96 97 98 99 )
while文入れ子(ネスト)でcontinue文 レベル指定 3階層
1-外
1-中
1-内
2-外
2-中
2-内
3-外
3-中
3-内
4-外
4-中
4-内
5-外
5-中
5-内
タグ(=記事関連ワード)
日付
最終更新日:2018年11月06日