for文の書き方と特徴(他のループ処理との違い)
Q:”for文は繰り返し処理”それは知っているでも他のループ処理と何が違うの??
A:繰り返す回数が決まっている場合に使う
そして、最もよく使われるループ処理!
書き方
for(初期値; 条件式;増減式){
//処理内容
}
※注意:「;」で閉じなくてOK。
条件式がfalseになるまでループさせるよ
ネスト(入れ子) ※重要
ループ処理全般だが、for文のループ処理を紹介
for文の中にfor文がある状態で、ネストすることにより、コードがシンプルになるメリットがありますが、何重にもしてしまうと、どういう動作をしているかが分かりにくくなってしまうため、2重、3重くらいまでにするのがおすすめ。
使いどころ
1.あるfor文のループ処理、そのものを、N回行いたいとき。
2. 表示(もしくはほしい)したい1つの結果の中に、変動する数値が複数あるとき。
(※変動する数値分、条件が必要な時)
練習問題
Q:全学年のクラスを一覧で出してくれ
表示すべきリスト
1年1組,1年2組,1年3組,1年4組,1年5組,
2年1組,2年2組,2年3組,2年4組,2年5組,
3年1組,3年2組,3年3組,3年4組,3年5組,
4年1組,4年2組,4年3組,4年4組,4年5組,
5年1組,5年2組,5年3組,5年4組,5年5組,
6年1組,6年2組,6年3組,6年4組,6年5組,
A:考え方と回答
表示すべきリストを思い描いた時、クラスごとのループ処理を学年分する必要があると考える。また、クラスだけではなく、学年も変数(条件式)になりそうだなと考える。
この時点で、
「(学年ごとの)クラスデータを、学年分ループ処理する」と思い浮かべればベスト!
①俺は初めてだから一番小さいループ処理から考えた…
最小単位の 「〇年△組,」 が5つ、 △の数値が変数のfor文をとりあえず作る。
for($class = 1; $class <= 5; $class++){
echo "1年" . $class . "組" . ",";
}
結果:1年1組,1年2組,1年3組,1年4組,1年5組,
②次は学年分まるっとループ処理させる!
①のループ処理を学年ループ処理したいから思い切って学年のループ処理でがばっと囲んでしまう。!
for($yesr = 1; $yesr <= 6; $yesr++){
for($class = 1; $class <= 5; $class++){
echo $yesr . "年" . $class . "組" . ",";
}
echo "<br>";
}
結果:できた!!
1(1)年1組,1年2組,1年3組,1年4組,1年5組,
2年1組,2年2組,2年3組,2年4組,2年5組,
3年1組,3年2組,3年3組,3年4組,3年5組,
4年1組,4年2組,4年3組,4年4組,4年5組,
5年1組,5年2組,5年3組,5年4組,5年5組,
6年1組,6年2組,6年3組,6年4組,6年5組,
■ おまけA(if文で表示内容を分岐)
例えば、もし、3年生だけ、3クラスしかない場合
つまり、表示する内容を変えないといけない時。
”もし、3年生だけ” なので if($yesr === 3) とプログラミング言語に変換。
そして入れる!
for($yesr = 1; $yesr <= 6; $yesr++){
if($yesr === 3){
for($class = 1; $class <= 3; $class++){
echo $yesr . "年" . $class . "組" . ",";}
}else{
for($class = 1; $class <= 5; $class++){
echo $yesr . "年" . $class . "組" . ",";
}
}
echo "<br>";
}
■ おまけB(if文のcontinueで特定の条件だけスキップ)
例えば、3年生だけいない学校の場合
つまり、特定のケースだけループ処理しないでほしい
(私のことはほっといて! 状態)
for($yesr = 1; $yesr <= 6; $yesr++){
if($yesr == 3){
continue;
}
for($class = 1; $class <= 5; $class++){
echo $yesr . "年" . $class . "組" . ",";
}
echo "<br>";
}
結果:スキップできた!
1年1組,1年2組,1年3組,1年4組,1年5組,
2年1組,2年2組,2年3組,2年4組,2年5組,
4年1組,4年2組,4年3組,4年4組,4年5組,
5年1組,5年2組,5年3組,5年4組,5年5組,
6年1組,6年2組,6年3組,6年4組,6年5組,
※3年生の行がスキップされる
※もし何か表示したい場合はif文の処理内にecho などの処理結果を表示
■ おまけC(if文のbreakで特定の条件になったら強制終了!)
例えば、急に2年生より上の学年が別の学校へ移った場合
つまり、2年生より上の学年をループ処理しないでほしい
($year変えろよって話だけど言わない)
for($yesr = 1; $yesr <= 6; $yesr++){
if($yesr == 3){
break;
}
for($class = 1; $class <= 5; $class++){
echo $yesr . "年" . $class . "組" . ",";
}
echo "<br>";
}
結果:スキップできた!
1年1組,1年2組,1年3組,1年4組,1年5組,
2年1組,2年2組,2年3組,2年4組,2年5組,
breakは、continueと違って、ループの先頭に戻らないので
ループ処理そのものが ”終了” となる。