第3のループ処理
これまでループ処理は「foreach文」と「for文」が登場しました。
foreach文は、記事「【PHPプログラミング入門講座】配列とループ処理 (foreach文)」で説明しました。
for文は、記事「【PHPプログラミング入門講座】ループ処理 (for文)」で説明しました。
今回は、第3のループ処理「while文」と「do-while文」について説明します。
while文
while文は条件がtrueであり続ける限り、繰り返され続ける処理です。
構文は次の通りです。
<構文>
while(条件) { 繰り返し処理 }
早速サンプルプログラムを書きます。
<サンプルプログラム>
<?php $num = 0; while($num < 3) { echo $num . '回目です。<br>'; $num++; }
分かりやすいように図を使って説明します。
図内の番号に対して説明します。
(1) 変数$numの値を0で初期化します。
※変数に初期値を代入する処理のことを「初期化」と言います。
(2) 初期化した$numの値0が、while文の条件「$num < 3」を満たすかどうか(結果がtrueになるかfalseになるか)を判定します。
trueの場合は、whileブロック内の処理に移ります。
falseの場合は、whileブロック内の処理は実行されません。
(3) 変数$numの値を使って文字列を出力しています。
1回目にwhileブロックに入ってきた時は、$numの値は0なので「0回目です。<br>」と出力されます。
(4) $numを1増加させています。
whileブロックの最後まで処理が行われると、図内の緑の矢印のようにwhileブロックの最初に戻ります。
そして、while文の条件「$num < 3」の判定をします。
この条件がtrueであれば、1増加した$numの値を使って再びwhileブロックの処理が実行されます。
最終的に、while文の条件「$num < 3」がfalseになった時点でwhile文のループ処理(whileループ)は終了します。
最後に、このサンプルプログラムの実行結果は次のようになります。
<実行結果>
0回目です。
1回目です。
2回目です。
無限ループ
先ほどのサンプルプログラムのwhileブロック内の最後の処理「$num++;」を書かなかった場合の処理について考えてみましょう。
次のようなプログラムになります。
<?php $num = 0; while($num < 3) { echo $num . '回目です。<br>'; }
この場合、変数$numの値が永遠に増えないため、いつまでたってもwhile文の条件「$num < 3」がtrueになることがありません。
そのため、while文のループ処理が永遠に実行され続けます。
このような状態のことを「無限ループ」と呼びます。
無限ループはプログラムのバグです。
無限ループが発生すると、PHPプログラムはしばらく固まったような状態になり、最後にエラーが発生し終了します。
無限ループは、PHPプログラムを実行しているサーバーに負荷を書ける処理ですので、可能な限り発生させないように注意しましょう。
do-while文
while文の亜種として、do-while文というのがあります。
構文は次の通りです。
do { 繰り返し処理 } while(条件);
上記から分かるように、do-while文はブロックの後ろにwhile(条件)を記述する構文です。
つまり、必ず一度はブロック内の処理をして、最後に条件判定を行い、ループ処理を終了するかどうか判断します。
サンプルプログラムを書きます。
<サンプルプログラム>
<?php $num = 0; do { echo $num . '回目です。<br>'; $num++; } while($num < 3);
分かりやすいように図を使って説明します。
図内の番号に対して説明します。
(1) 変数$numの値を0で初期化します。
(2) do-whileブロックの最初は「do」を書きます。
ここはそのままスルーしてブロック内の処理に進みます。
(3) 変数$numの値を使って文字列を出力しています。
1回目にdo-whileブロックに入ってきた時は、$numの値は0なので「0回目です。<br>」と出力されます。
(4) $numを1増加させます。
(5) 最後に条件「$num < 3」を満たすかどうか(結果がtrueになるかfalseになるか)を判定します。
この条件がtrueであれば、図内の緑の矢印に従い、再びdo-whileブロックの最初に処理が戻ります。
falseであれば、do-whileブロックから抜け出してループ処理が終了します。
最後に、このサンプルプログラムの実行結果は次のようになります。
<実行結果>
0回目です。
1回目です。
2回目です。
do-while文についてですが、正直、使う機会はめったに無いです。
筆者は20年以上プログラミングやっていますが、1、2回くらいしか使ったことがないと思います。
ループ処理は、foreach文、for文、while文で足りるからです。
いちおう、こんな構文もあることを知っておくくらいでOKです。
おわりに
今回は、PHPのループ処理while文、do-while文について説明しました。
PHPのループ処理は、foreach文、for文、while文、do-while文の4種類です(※注1)。
プログラミングができるようになるには、ループ処理の理解は必須です。
これまでのこの連載記事「PHPプログラミング入門講座」の記事を読んだり、練習問題を解いたりして、自分で何も見なくても書けるようになっておきましょう。
while文、do-while文の練習問題を次の記事に書くので、頑張ってチャレンジしてみてくださいね!
※注1:あえて言うと、他に「goto文」という構文を使ったループ処理があります。
ただ、非常に古い書き方であり、今は使われていません。
goto文は、プログラムの任意の場所にジャンプできてしまう処理であるため、プログラム構造を崩し、可読性が低くなり、バグが発生しやすくなります。
もし、使ったら他のエンジニアから注意されると思います。
禁断の呪文レベルなので使用しないようにしましょう。
PHPプログラミング入門講座 〜 全記事一覧 〜
- PHPで開発された有名なWebサイト
- PHPでどのような機能が作れるか?
- サーバーについて理解しよう
- Webサーバーの処理について詳しく説明
- PHPプログラムの動作について説明
- パソコンにPHPの動作環境を構築しよう
- 一番簡単なPHPプログラムを書いてみよう
- ブラウザ画面にメッセージを表示しよう
- PHPタグの書き方と終了タグの省略
- 特殊なメッセージ(文字列)の書き方
- PHPプログラムで計算をしてみよう
- 変数
- 文字列の結合とヒアドキュメント
- ファイルの分割とファイルの読み込み
- コメント
- 定数
- 数値と文字列の性質・デバッグ
- 条件分岐 (if文)
- 論理型 (boolean型)
- 比較演算子
- 論理演算子
- 条件分岐 (switch文)
- 三項演算子
- 配列とforeach文
- 代入演算子 / 加算子 / 減算子
- ループ処理 (for文)
- 現在のページ:ループ処理 (while文とdo-while文)
- break
- continue
- 連想配列
- 連想配列のループ処理