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

6-11 continue 文

Pocket

- 1 分ノート ! -

  • continue文はループ処理中に以降の文を飛ばして条件式の評価を経てループ処理の最初に戻る
    continue;
    
  • continue文は引数でループ構造を抜けるレベルを指定できる
    continue 2;
    
  • continue文はswitch文をループ構造と判断する

continue文とは
POINT

  • 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 のみ出力されません。

for($i = 1; $i <= 10; $i++){
	if($i === 5) continue;
	echo "$i<br/>\n";
}

結果は

1
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";」などは、実行されません。

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";
}

結果は

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 )

となります。

文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコードのことです。

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

使用例
 

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

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

結果は

1
2
3
4
6
7
8
9
10

となります。

while文でcontinue文
$i = 1;
while($i <= 10){
	if($i === 5){
		$i++;
		continue;
	}

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

結果は

1
2
3
4
6
7
8
9
10

となります。

do~while文でcontinue文
$i = 1;
do{
	if($i === 5){
		$i++;
		continue;
	}

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

</div>


<h6>foreach文でcontinue文</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)
	continue;

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

結果は

1
2
3
4
6
7
8
9
10

となります。

while文入れ子(ネスト)でcontinue文
$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-中
1-内
2-外
2-中
2-内
3-外
3-中
3-内
4-外
4-中
4-内
5-外
5-中
5-内

となります。

for文入れ子(ネスト)でcontinue文
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";
}

結果は

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 )

となります。

サンプルコード

– サンプル Click Here ! –

<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";
}
?>
実行結果
for文でcontinue文
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-内

– サンプル Click Here ! –


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

日付

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

関連記事

配列関数サンプル

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

この記事へのコメント

トラックバックurl

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