ループはその名の通り「同じことを繰り返す」という技になります。
ループにはまずは必須の2種類の書き方のを見ていきましょう!
for文
最初に一言で特徴をいうと、
「指定した回数をループする時に便利」なものです。
1〜10までの数字をfor文というループを使って出力してみます。
<?php
for($i = 1; $i <= 10; $i++) {
echo $i;
}
?>
for文は「($i = 1; $i <= 10; $i++)」の部分を3つに分けられます。
for文の構造
- 左の「$i = 1;」:$iに1を入れておく
- 真ん中の「$i <=10;」:ループが回る条件は、$i が10より小さいという意味
- 右の「$++」:ループが回る度に $iに1が足されていく(インクリメント)
- 真ん中の条件を満たすと {} の中の処理に入る(今回はただ出力するだけ)
真ん中の「$i <= 10」という条件を満たす限りループし続けます。
練習問題
早速ですが、ちょっと練習してみましょう。
1〜10の数で偶数のものだけを出力してください。
考え方
- 「1〜10」を出力→ ($i = 1; $i <= 10; $i++)というfor文
- 「偶数だけ出力」→if($i % 2 === 0)という偶数を判定するif文を組み合わせる
<解答>
<?php
for($i = 1; $i <= 10; $i++) {
if($i % 2 === 0) {
echo $i;
}
}
?>
echoで出力すると、改行されずに次のように表示されます。
246810
while文
while文の特徴は、
「指定した条件を満たす間ループする」というもの
for文と同じように1〜10までの数字をwhile文を使って出力してみましょう
<?php
$i = 1;
while($i <= 10) {
echo $i;
$i++;
}
?>
for文とだいぶ形が違いますが、まずはどのような構造になっているか確認しておきましょう。
while文の構造
- whileが始まるより上の行で、$iに1を入れておく
- ($i <= 10)という条件を満たすなら{}の中の処理に入る
- $iを表示した後に、$iに1をプラスする←これをしないと、$iが1のまま変化せず($i <= 10)という条件を永遠に満たし続けることになります。いわゆる無限ループですね
配列、ループ、if文を組み合わせてみる
プログラミングは「配列」と「if文」と「ループ」ができると基本的には何でも作れると言われます。
実際に組み合わせて簡単なプログラムを作ってみましょう。
不正な値の入力値チェック!
申し込みのあった年齢が正常な値かどうかチェックする処理
これだけ聞くと難しそうですが、実は
- 配列
- ループ
- if文
この知識の組み合わせだけで作ることができます。
<考え方>
- 申し込みがあった年齢を$agesという配列に入れておきます
- 今回「不正な値」というのは「0歳〜120歳以外の全ての値」ということにしておきます
→「-22歳, 147歳, -10歳」は年齢として不正な値です - 値が「0歳〜120歳の値」であれば出力。そうでなければ何もしないという条件のif文を作ります
コードで書くとこんな感じになります。
<?php
$ages = [18, 24, 30, -22, 27, 147, 100, -10];
echo '申し込みがあったのは以下の年齢です';
for($i = 0; $i < count($ages); $i++) {
if ($ages[$i] > 0 && $ages[$i] <= 120) {
echo '<br>';
echo $ages[$i] . '歳です';
}
}
?>
<出力結果>
申し込みがあったのは以下の年齢です
18歳です
24歳です
30歳です
27歳です
100歳です
書き方を詳しく解説
今回ループをして欲しい箇所は、
「年齢を出力する箇所」です
しかし、そのままだと無条件で全ての年齢がechoで画面表示されてしまうので、
if文で正しいデータのみ処理をさせるように書きます。
for文で全件分ループしながら、
「if文の条件判定を突破したものだけが処理の対象になる」というイメージになります。
新しく出てきた知識が、2つあるのでそれも解説していきます。
一つ目:count($ages)
突然「count」というものが出てきました。
これは配列$agesの個数を数えてくれる関数です。
$agesの中には「18, 24, 30, -22, 27, 147, 100, -10」の全部で8つ入っています。
count関数で取得した8という数字を「何回ループするかという条件に利用しています」
このcountを使うことで、配列の個数が増えたり減ったりした時も自動で変化してくれます。
二つ目:'<br>’
‘<br>’は、HTMLの改行を意味するものです。
PHPで「HTMLの改行」をechoを使って表現するという考えになります
まとめ
- for文はループする回数を条件にして使用する
- while文は条件を満たす間ずっとループする(←回数に限らない)
- count関数を使うと配列の個数をカウントしてくれる
- ‘<br>’をechoで出力すると改行されて表示される