プログラミングの大きな強みの一つは、面倒な繰り返し作業をコンピュータに自動で実行させられることです。「100人分のメールを送信する」「カレンダーの日付を31日分表示する」といった処理は、まさに繰り返し処理(ループ)の得意分野です。
PHPには、このループを実現するための構文がいくつかありますが、今回はその中でも基本となるwhile
文とfor
文の使い方を、初心者の方にも分かりやすく解説します。
1. while
文 〜 条件を満たす間、繰り返す 〜
while
文は、指定した条件式が「正しい(true
)」である限り、{ }
ブロックの中の処理を何度も繰り返し実行します。
【while
文の基本構造】
while (条件式) {
// 繰り返したい処理
}
while
文のサンプルコード
1から10までの数字を順番に表示する、という簡単な例を見てみましょう。
<?php
$i = 1; // ① カウンタ変数を初期化
while ($i <= 10) { // ② $iが10以下である限りループを続ける
echo $i . "回目のループです。<br>";
$i++; // ③ $iの値を1増やす(非常に重要!)
}
【コードのポイント】
- ループの回数を数えるための変数
$i
を1
で初期化します。 while
文で$i
が10
以下かどうかをチェックします。- ループ内の処理が終わるたびに
$i++
で変数の値を更新します。
⚠️ 最重要:無限ループに注意! もし上記のコードで
$i++
を書き忘れると、$i
の値は永遠に1
のままです。その結果、$i <= 10
という条件が常にtrue
となり、プログラムは無限にループし続け、最終的に停止してしまいます。while
文を使う際は、ループを終わらせるための条件更新を絶対に忘れないようにしましょう。
2. 便利な「複合代入演算子」
ループ処理では、「変数自身の値に何かを加えて、結果を同じ変数に戻す」という計算が頻繁に出てきます。
$sum = $sum + $i;
このような自己代入は、「複合代入演算子」を使うことで、より短く、分かりやすく書くことができます。
$sum += $i; // 上のコードと全く同じ意味
演算子 | 例 | 意味 |
+= | $a += $b | $a = $a + $b |
-= | $a -= $b | $a = $a - $b |
*= | $a *= $b | $a = $a * $b |
/= | $a /= $b | $a = $a / $b |
. = | $a .= $b | $a = $a . $b (文字列の連結) |
複合代入演算子の使用例
1から50までの数字の中で、「3の倍数または5の倍数」の合計を求めてみましょう。
<?php
$i = 1;
$sum = 0;
while ($i <= 50) {
// 3で割り切れる、または、5で割り切れる
if ($i % 3 === 0 || $i % 5 === 0) {
$sum += $i; // 合計に加算
}
$i++;
}
echo "条件に合う数値の合計は: {$sum} です。";
3. for
文 〜 回数が決まっている繰り返しに最適 〜
for
文は、while
文と並んでよく使われるループ構文です。特に「繰り返す回数があらかじめ決まっている」場合に非常に便利です。
【for
文の基本構造】
for (①初期化式; ②条件式; ③変化式) {
// 繰り返したい処理
}
ループに必要な3つの要素が1行にまとまっているのが特徴です。
- 初期化式: ループが始まる前に一度だけ実行されます。(例:
$i = 1
) - 条件式: ループが繰り返されるたびにチェックされ、
false
になるとループが終了します。(例:$i <= 10
) - 変化式: ループ内の処理が終わるたびに実行されます。(例:
$i++
)
この構造のおかげで、for
文はwhile
文に比べてカウンタ変数の更新を忘れにくく、無限ループに陥るリスクが低いというメリットがあります。
4. for
文とHTMLの連携
ループ処理の強力な使い道の一つが、HTMLの動的な生成です。例えば、for
文を使ってリストを作り、偶数行と奇数行で背景色を交互に変えてみましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>forループとHTML</title>
<style>
ul { list-style: none; padding: 0; }
li { padding: 8px; border-bottom: 1px solid #ccc; }
.even-row { background-color: #f2f2f2; } /* 偶数行のスタイル */
</style>
</head>
<body>
<h1>商品リスト</h1>
<ul>
<?php for ($i = 1; $i <= 10; $i++): ?>
<?php
// $iが偶数ならCSSクラスを設定
$row_class = '';
if ($i % 2 === 0) {
$row_class = 'even-row';
}
?>
<li class="<?php echo $row_class; ?>">
商品 No.<?php echo $i; ?>
</li>
<?php endfor; ?>
</ul>
</body>
</html>
このコードでは、ループのカウンタ変数$i
を2
で割った余りが0
かどうか(つまり偶数かどうか)を判定し、even-row
というCSSクラスを付けたり外したりしています。これにより、見やすいシマシマ模様のリストを簡単に生成できます。
まとめ
今回は、PHPの繰り返し処理の基本であるwhile
文とfor
文について学びました。
【ポイントの振り返り&使い分け】
while
文:- 条件を満たす間繰り返す。
- ループ回数が事前に決まっていない処理に向いている。
- 無限ループに注意が必要。
for
文:- 決まった回数繰り返す。
- ループの3要素(初期化、条件、変化)が1行にまとまっていて管理しやすい。
- カウンタを使ったループ処理に最適。
どちらを使うべきか迷ったときは、「ループの回数が最初から分かっているか?」を基準に考えてみましょう。この2つのループを使いこなせれば、面倒な作業の自動化や、大量のデータを扱う処理など、プログラミングでできることの幅が大きく広がります。