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