PHPのループ処理(for&while)
更新日 : 2018年06月05日
PHPのループ処理についての解説です。一般的な書式に沿っているので理解してしまえば他の言語でもループ処理は書きやすいかと思います。
PHPのループ処理
PHPのループ処理は大きく分けて3種類あります。
- for文
- while文
- foreach文
の3つです。今回はfor文、while文についての解説です。3つ目のforeach文ではPHPの配列を使用するので、PHPの配列の記事を理解していただいてから読んでいただければと思います。
for文while文では配列は必要ないため今回の記事と、foreach文の記事で分割させて頂きます。
for文while文はどちらも同じ処理を実装できますが、場合によって書式を決めてください。好みでも構いません。(笑)
for文
まずはfor文の書式です。筆者はfor文の方が書き慣れています。(笑)
for(カウンター初期値;ループの条件式;ループの最後に実行する処理) {
ループの条件式がTRUEのときに実行する処理
}
実際に見てみたほうが早いと思うので、コードを見ていきましょう。
<?php
for($i=0;$i<10;$i++) {
echo $i+1 . "番目の処理です。";
echo "<br>";
}
?>
まずはfor()の丸括弧の中を見ていきましょう。
$i=0
こちらはカウンターの初期値を決めて代入しておく部分です。今回は$i
という変数を0からスタートするという意味になります。$i<10
こちらはループの条件式です。$i
という変数が10未満のときに中括弧{}
内の処理を行うという意味になります。$i++
最後にあるこの部分は、中括弧{}
内の処理の最後に行う処理になります。
この処理を適切に設定しないと永遠にループしてしまったりするので注意が必要です。
今回のループの処理の条件をまとめると、「$i
の変数を0からスタートし、ループ内の処理を終わった後$i
に+1しながら$i
が10未満になるまでループ処理を行い続ける」という感じですね。
今回のコードを実行すると下の画像のようになります。
ループ内の処理はecho $i+1 . "番目の処理です。"
となっています。$i
は0からスタートしているので、echoする際に「1番目の処理です。」となりますね。
ループ内の処理が終了すると、$i++
が実行され、$i
が1となります。$i
が1ということは10未満という条件を満たすため、ループ内の処理が再び実行され、「2番目の処理です。」と表示されます。これが繰り返され、$i
が10になったとき、$i<10
を満たしません。その為そこでループが外れます。$i
が9で最後のループ内処理が実行されます。
ちょっと応用
少し応用して逆にカウントダウンのプログラムも作ってみましょう。
<?php
for($i = 10;$i >= 0;$i = $i -2) {
if($i > 0) {
echo "残りは" . $i . "です!";
} else {
echo "これで最後!0になりました!";
}
echo "<br>";
}
?>
こちらはどのように表示されるでしょうか。答えは下の画像の通りです。ちょっと応用しているだけなのでこのようなこともできるな〜ということをりかいしていだければと思います。
while文
次はwhile文です。while文も正確には2つ存在するのでどちらも書式を見ていきましょう。
// while文
while (条件式) {
条件式の結果がTRUEのときに実行される
}
// do-while文
do {
まずこの部分の処理が実行される。
その後下の条件式の結果がTRUEのときに再度実行される
} while(条件式);
こちらの2種類です。while文では条件式を書くだけになっています。そのため、条件式で使用する変数に格納されている値などが、ループ内の処理で変更されなければ永遠にループするはめになってしまいます。
コード例を見てみましょう。
<?php
$i = 5;
while ($i < 10) {
echo $i . "<br>";
$i++;
}
do {
echo $i . "<br>";
$i--;
} while($i >= 5);
?>
今回はfor文のように宣言代入する処理は無いため、while文を始める前に、条件式で使用する変数が初期化(宣言され、初期値が代入されていること)されている必要があります。
変数$i
を5からスタートして、まずは通常のwhile文です。
10未満の条件式を満たすため、while文が実行されます。while文の最後で$i
が更新されています。このようにしないと5のままなので、while文内の処理が永遠に実行されてしまいます。そのような状態を無限ループと言います。無限ループは名前だけかっこいいですが、良くないことです。(笑)
次にdo-while文です。
条件式を評価する前に、do内の処理が実行されます。while文とdo-while文の違いはこの部分です。
while文では条件式をまず評価してループ内の処理が実行されるか決まりますが、do-while文ではdo内の処理を実行してから、評価して次もdo内の処理を行うかを決めるため、必ず1度は実行されます。
do-while文も場合によっては無限ループに陥るので気をつけましょう。
こちらのコードの実行結果は以下の画像のようになります。
まとめ
今回はfor文、while文について書いていきました。
個人的にはwhile文は条件式で使用する変数の更新を忘れがちになるのでfor文を利用することが多いです。
もちろん実現したい機能によって使い分けられるとベストです。
タグ
-
前の記事
PHPの条件式(switch文)
-
次の記事
PHPのループ処理(foreach文)