UPDATE:2018年11月06日
PHP while 文
1 Minute Note
- while文 はループ処理を行う
while (式) 文 //文が複数の場合「{ }(ブロック)」で括る while (式){ 文 文 文 }
- while文 の 式 の評価は各ループ処理の開始時に行われる
- 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない
- while文 を 入れ子 にすることが出来る
- キーワード「break」でループを終了させることが出来る
- キーワード「continue」で以降の文を実行せず再び while文 の 式 の評価へ戻ることが出来る
- ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード
while文とは
- while文 はループ処理を行う
while (式) 文 //文が複数の場合「{ }(ブロック)」で括る while (式){ 文 文 文 }
- while文 の 式 の評価は各ループ処理の開始時に行われる
- 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない
- ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード
while文はループ(反復)処理を表現する制御文です。PHPで最も簡単なループ処理です。
while文の構文は
while (式) 文 //文が複数の場合「{ }(ブロック)」で括る while (式){ 文 文 文 }
です。
最初にwhile文の 式 を評価し、結果が「TRUE(真)」の場合に、文を実行し、その後、もう1度 式 の評価を行います。まだ「TRUE(真)」の場合は、文を実行し、再度 式 の評価を行います。このようにしてループ処理が続行されます。
例
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ echo $i."<br>\n"; $i++; } ?> |
結果は
2
3
4
5
6
7
8
9
10
となります。
while文の 式 の評価が「FALSE(偽)」と評価された場合は文は実行されずループは終了します。最初にwhile文の 式 の評価が「FALSE(偽)」だと文は1回も実行されません。
例
以下の例は最初にwhile文の 式 の評価が「FALSE(偽)」なので、文は1回も実行されません。
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $i = 11; while($i <= 10){ echo $i."<br>\n"; $i++; } ?> |
結果は
となります。
while文の 式 の評価は各ループ処理の開始時に行われるので、ループ内の文の実行により 式 の内容が変化したとしても、文の実行はループ処理が終るまで続きます。
例
以下の例は文の実行「$bool = FALSE;」により式の内容が「FALSE(偽)」へと変化しましたが、式 の評価はループ処理の開始時に行われるので、文はループ処理が終わるまで実行されます。
1 2 3 4 5 6 7 8 9 10 11 | <!-- サンプルコード --> <?php $bool = TRUE; $i = 1; while($bool){ $bool = FALSE; echo $i."<br>\n"; $i++; } echo $i."<br>\n"; ?> |
結果は
2
となります。
while文の 式 の結果は「真(TURE)」と「偽(FALSE)」の論理型で得る必要があります。ですので、式 には「比較演算子」や「論理演算子」など使用するなどして論理値の「真(TRUE)」「偽(FALSE)」の値を返す式を作ります。論理型についてはこちらを参照下さい。
文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコードです。
文が複数の場合は「{ }(ブロック)」で括ります。if文などと同じです。
簡単なwhile文
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ echo $i."<br>\n"; $i++; } ?> |
結果は
2
3
4
5
6
7
8
9
10
となります。
while文の 式 が「FALSE(偽)」と評価された時点で処理を終了します。
式 が最初に「false(偽)」の場合のwhile文
- 最初に while文 の 式 の評価が「FALSE(偽)」だと 文 は1回も実行されない
while文は、式 の評価を各ループ処理の開始時に行うので、最初に 式 の評価が「FALSE(偽)」だと 文 は1回も実行されません。
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $i = 1; while($i < 1){ echo $i."<br>"; $i++; } ?> |
結果は
となります。
while文の入れ子
- while文 を 入れ子 にすることが出来る
while文では、while文の中にwhile文を記述する入れ子(ネスト)が可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ echo $i; $j = 1; echo '('; while($j <= 3){ echo $i.'-'.$j.','; $j++; } 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,)
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」でループを終了させる
- キーワード「break」でループを終了させることが出来る
while文ではキーワード「break」を使用してwhile文のループを終了させることが出来ます。「break」が出てきた時点で、文の実行が終了しループ処理を抜け出します。
以下の例文ではif文でキーワード「break」を配置し、文の実行を終了させループ処理を抜け出しています。
1 2 3 4 5 6 7 8 9 10 11 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ if($i === 5) break;//ループ終了 echo $i.'<br>'; $i++; } ?> |
結果は
2
3
4
となります。
キーワード「break」のオプションを使用
キーワード「break」はループを終了させる機能がありますが、while文が入れ子(ネスト)構造であった場合に、何段階のループを抜けるかを数字で指定することが出来ます。これは、キーワード「break」のオプション機能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- サンプルコード --> <?php $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; ?> |
結果は
$jは5
となります。
例文では「break 2;」と指定して、ループ構造を2段階抜けています。$jが5まで加算された時点で「break」が実行され、ループ処理を2段階抜けるので、すべてのループから抜けることになります。従って$iは加算されずにループ処理を終了しています。
キーワード「continue」で 式 の評価に戻る
- キーワード「continue」で以降の文を実行せず再び while文 の 式 の評価へ戻ることが出来る
キーワード「continue」を使用して以降の文を実行せずwhile文の 式 の評価に戻ることが出来ます。通常 while文の 文 の実行が最後まで終了してから、while文の 式 の評価へ戻りますが、キーワード「continue」が出てきた時点で以降の文を実行せずに、式 の評価へ戻ります。式 の評価後ループを再開します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- サンプルコード --> <?php $i = 1; while($i <= 10){ if($i === 5){ echo '5となりました。<br>'; $i++; continue;//while(式)の評価へ移動 } echo $i.'<br>'; $i++; } ?> |
結果は
2
3
4
5となりました。
6
7
8
9
10
となります。
キーワード「continue」もキーワード「break」ど同様に、オプションで何段階のループを抜けるか数字で指定できます。
以下の例文では、「$i === 5」の場合にif文で「continue 2」を実行し最初のwhile文の 式 の評価へ戻っています。
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; $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++; } ?> |
結果は
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,)
となります。
サンプルコード
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 | <!-- サンプルコード --> <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++; } ?> |
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
タグ(=記事関連ワード)
日付
最終更新日:2018年11月06日