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

6-7 while 文

Pocket

- 1 分ノート ! -

  • while文 はループ処理を行う
    while (式)
    	文
    
    //文が複数の場合「{ }(ブロック)」で括る
    while (式){
    	文
    	文
    	文
    }
    
  • while文 の 式 の評価は各ループ処理の開始時に行われる
  • 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない
  • while文 を 入れ子 にすることが出来る
  • キーワード「break」でループを終了させることが出来る
  • キーワード「continue」で以降の文を実行せず再び while文 の 式 の評価へ戻ることが出来る
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード

while文とは
POINT
  • while文 はループ処理を行う
    while (式)
    	文
    
    //文が複数の場合「{ }(ブロック)」で括る
    while (式){
    	文
    	文
    	文
    }
    
  • while文 の 式 の評価は各ループ処理の開始時に行われる
  • 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード

while文はループ(反復)処理を表現する制御文です。PHPで最も簡単なループ処理です。

while文の構文は

while (式)
  文

//文が複数の場合「{ }(ブロック)」で括る
while (式){
	文
	文
	文
}

です。

最初にwhile文の 式 を評価し、結果が「TRUE(真)」の場合に、文を実行し、その後、もう1度 式 の評価を行います。まだ「TRUE(真)」の場合は、文を実行し、再度 式 の評価を行います。このようにしてループ処理が続行されます。

$i = 1;
while($i <= 10){
	echo $i."<br/>\n";
	$i++;
}

結果は

1
2
3
4
5
6
7
8
9
10

となります。

while文の 式 の評価が「FALSE(偽)」と評価された場合は文は実行されずループは終了します。最初にwhile文の 式 の評価が「FALSE(偽)」だと文は1回も実行されません


以下の例は最初にwhile文の 式 の評価が「FALSE(偽)」なので、文は1回も実行されません。

$i = 11;
while($i <= 10){
	echo $i."<br/>\n";
	$i++;
}

結果は


となります。

while文の 式 の評価は各ループ処理の開始時に行われるので、ループ内の文の実行により 式 の内容が変化したとしても、文の実行はループ処理が終るまで続きます。


以下の例は文の実行「$bool = FALSE;」により式の内容が「FALSE(偽)」へと変化しましたが、式 の評価はループ処理の開始時に行われるので、文はループ処理が終わるまで実行されます。

$bool = TRUE;
$i = 1;
while($bool){
	$bool = FALSE;
	echo $i."<br/>\n";
	$i++;
}
echo $i."<br/>\n";

結果は

1
2

となります。

while文の 式 の結果は「真(TURE)」と「偽(FALSE)」の論理型で得る必要があります。ですので、式 には「比較演算子」や「論理演算子」など使用するなどして論理値の「真(TRUE)」「偽(FALSE)」の値を返す式を作ります。論理型についてはこちらを参照下さい。

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

文が複数の場合は「{ }(ブロック)」で括ります。if文などと同じです。

簡単なwhile文
$i = 1;
while($i <= 10){
	echo $i."<br/>\n";
	$i++;
}

結果は

1
2
3
4
5
6
7
8
9
10

となります。

while文の 式 が「FALSE(偽)」と評価された時点で処理を終了します。

式 が最初に「false(偽)」の場合のwhile文
POINT
  • 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない

while文は、式 の評価を各ループ処理の開始時に行うので、最初に 式 の評価が「FALSE(偽)」だと 文 は1回も実行されません。

$i = 1;
while($i < 1){
	echo $i."<br/>";
	$i++;
}

結果は

となります。

while文の入れ子
POINT
  • while文 を 入れ子 にすることが出来る

while文では、while文の中にwhile文を記述する入れ子(ネスト)が可能です。

$i = 1;
while($i <= 10){
	echo $i;

	$j = 1;
	echo '(';
	while($j <= 3){
		echo $i.'-'.$j.',';
		$j++;
	}
	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,)
6(6-1,6-2,6-3,)
7(7-1,7-2,7-3,)
8(8-1,8-2,8-3,)
9(9-1,9-2,9-3,)
10(10-1,10-2,10-3,)

となります。

キーワード「break」でループを終了させる
POINT
  • キーワード「break」でループを終了させることが出来る

while文ではキーワード「break」を使用してwhile文のループを終了させることが出来ます。「break」が出てきた時点で、文の実行が終了しループ処理を抜け出します。

以下の例文ではif文でキーワード「break」を配置し、文の実行を終了させループ処理を抜け出しています。

$i = 1;
while($i <= 10){
	if($i === 5)
	break;//ループ終了

	echo $i.'<br/>';
	$i++;
}

結果は

1
2
3
4

となります。

キーワード「break」のオプションを使用

キーワード「break」はループを終了させる機能がありますが、while文が入れ子(ネスト)構造であった場合に、何段階のループを抜けるかを数字で指定することが出来ます。これは、キーワード「break」のオプション機能です。

$i = 1;
$j = 1;
while($i <= 10){
	while($j <= 10){
		if($j === 5)
		break 2;//2段階のループから抜ける
		$j++;
	}
	$i++;
}
echo '$iは'.$i;
echo "<br/>\n";
echo '$jは'.$j;

結果は

$iは1
$jは5

となります。

例文では「break 2;」と指定して、ループ構造を2段階抜けています。$jが5まで加算された時点で「break」が実行され、ループ処理を2段階抜けるので、すべてのループから抜けることになります。従って$iは加算されずにループ処理を終了しています。

キーワード「continue」で 式 の評価に戻る
POINT
  • キーワード「continue」で以降の文を実行せず再び while文 の 式 の評価へ戻ることが出来る

キーワード「continue」を使用して以降の文を実行せずwhile文の 式 の評価に戻ることが出来ます。通常 while文の 文 の実行が最後まで終了してから、while文の 式 の評価へ戻りますが、キーワード「continue」が出てきた時点で以降の文を実行せずに、式 の評価へ戻ります。式 の評価後ループを再開します。

$i = 1;
while($i <= 10){
	if($i === 5){
		echo '5となりました。<br/>';
		$i++;
		continue;//while(式)の評価へ移動
	}

	echo $i.'<br/>';
	$i++;
}

結果は

1
2
3
4
5となりました。
6
7
8
9
10

となります。

キーワード「continue」もキーワード「break」ど同様に、オプションで何段階のループを抜けるか数字で指定できます。

以下の例文では、「$i === 5」の場合にif文で「continue 2」を実行し最初のwhile文の 式 の評価へ戻っています。

$i = 1;
while($i <= 10){
	echo $i;
	$j = 1;
	echo '(';

	while($j <= 3){
		if($i === 5){
			echo ')';
			echo "<br/>\n";
			$i++;
			continue 2;
		}

		echo $i.'-'.$j.',';
		$j++;
	}

	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()
6(6-1,6-2,6-3,)
7(7-1,7-2,7-3,)
8(8-1,8-2,8-3,)
9(9-1,9-2,9-3,)
10(10-1,10-2,10-3,)

となります。

サンプルコード

– サンプル Click Here ! –

<h3>簡単なwhile文</h3>
<?php
$i = 1;
while($i <= 10){
	echo $i.'<br/>';
	$i++;
}
?>

<h3>条件式が最初にfalseの場合のwhile文</h3>
<?php
$i = 1;
while($i < 1){
	echo $i.'<br/>';
	$i++;
}
echo '一度も実行されない。';
?>

<h3>while文は入れ子が出来ます。</h3>
<?php
$i = 1;
while($i <= 10){
	echo $i;

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

	echo '<br/>';
	$i++;
}
?>

<h3>キーワード「break」を使用してwhile文のループを終了させる</h3>
<?php
$i = 1;
while($i <= 10){
	if($i === 5)
	break;//ループ終了

	echo $i.'<br/>';
	$i++;
}
?>

<h3>キーワード「break」のオプションを使用</h3>
<?php
$i = 1;
$j = 1;
while($i <= 10){
	while($j <= 10){
		if($j === 5)
		break 2;//2段階のループから抜ける
		$j++;
	}
	$i++;
}
echo '$iは'.$i;
echo '<br/>';
echo '$jは'.$j;
?>

<h3>キーワード「continue」を使用して以降の文を実行せずwhile(式)の評価に戻る</h3>
<?php
$i = 1;
while($i <= 10){
	if($i === 5){
		echo '5となりました。<br/>';
		$i++;
		continue;//while(式)の評価へ移動
	}

	echo $i.'<br/>';
	$i++;
}
?>
実行結果
簡単なwhile文
1
2
3
4
5
6
7
8
9
10

条件式が最初にfalseの場合のwhile文
一度も実行されない。

while文は入れ子が出来ます。
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,)
6(6-1,6-2,6-3,)
7(7-1,7-2,7-3,)
8(8-1,8-2,8-3,)
9(9-1,9-2,9-3,)
10(10-1,10-2,10-3,)

キーワード「break」を使用してwhile文のループを終了させる
1
2
3
4

キーワード「break」のオプションを使用
$iは1
$jは5

キーワード「continue」を使用して以降の文を実行せずwhile(式)の評価に戻る
1
2
3
4
5となりました。
6
7
8
9
10

– サンプル Click Here ! –


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

日付

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

関連記事

配列関数サンプル

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

この記事へのコメント

トラックバックurl

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