for文を使ってループ処理をしよう
ループ制御の構文には、これまでご紹介したwhile文・do/while文の他に、for文というものもあります。
for文はwhile文と同じほぼ制御をしますが、while文がカウンタの初期値を構文の外に書き、カウンタ操作を処理の中に書くのに対し、for文はすべてまとめて1つの()の中に書けるという特徴があります。
どちらでも構いませんが、for文の方が見やすいコードになるため好まれます。
目次 Table of Contents
for文でループ処理をする
for文を使ったループ文は、条件やカウンタ操作が一目で見やすいので、スッキリしたコードになります。
同じ処理をfor文とwhile文で書いて比較してみます。
$day = $num + 7;
echo '今日は'.$num.'日です。一週間後は'.$day.'日です。';
}
//
$num = 1;
while($num < 5){
$day = $num + 7;
echo '今日は'.$num.'日です。一週間後は'.$day.'日です。';
$num++;
}
今日は2日です。一週間後は9日です。
今日は3日です。一週間後は10日です。
今日は4日です。一週間後は11日です。
今日は1日です。一週間後は8日です。
今日は2日です。一週間後は9日です。
今日は3日です。一週間後は10日です。
今日は4日です。一週間後は11日です。
どちらも全く同じ制御ですが、カウンタ($num)の初期値を書く場所、カウンタの操作($numに+1)を書く場所が違いますね。
for文の場合はこれらループに必要なことをすべて一つの()の中に詰め込むことができるのです。
ただし、このときの「;」は、式の終わりを示すものではなく、3つの式を区切るためのパーテーションのようなものだと思ってください。
3つ目のカウンタ操作($num++)の右には「;」がありませんよね。
continue;によるループの部分制御
switch文のコラムでサラッとご紹介しましたが、break;を使うと条件式から抜け出すことができました。
break;は制御文の一種で、ループ内で使うとその時点で強制的にループを抜け出すこともできます。
また同じく制御文のcontinue;をループ内で使うと、いったんcontinue;のところで処理が止まり、強制的にループ処理の先頭から再開することができます。
ではfor文の練習として、「1~30までの数字を連続して表示するが、3の倍数のときだけ表示しない」というコードを書いてみましょう。
「3の倍数である」ということは、3で割ったときの余りが「0」ということですね。
$surp = $num % 3;
if($surp == 0){
continue;
}
echo $num."<br />";
}
2
4
5
7
8
10
11
13
14
16
17
19
20
22
23
25
26
28
29
for文の中にif文や、さらにループ文を書いたりすることもできます。
3の倍数だったとき、if文の中の処理が行われますが、ifの中にはcontinue;があるので下のecho文が飛ばされたというわけです。
コメントフォーム
自分の勉強にもなりますので、コメントいただけるとうれしいです。