カテゴリ: PHP 更新日: 2026/04/23

PHPのfor文で繰り返し処理!カウンタ変数を使ったループの基本を徹底解説

PHPのfor文で繰り返し処理!カウンタ変数を使ったループの基本
PHPのfor文で繰り返し処理!カウンタ変数を使ったループの基本

先生と生徒の会話形式で理解しよう

生徒

「先生、プログラミングで同じ作業を何度も繰り返したい時、一つずつ書くのは大変ですよね?」

先生

「その通りです。そこで役立つのが『繰り返し処理』、別名『ループ処理』です。PHPでは『for文』という仕組みを使います。」

生徒

「for文を使えば、100回や1000回といった大量の処理も一瞬で終わるんですか?」

先生

「はい、たった数行のコードで実現できます。まずは基本の書き方からマスターしていきましょう!」

1. PHPのfor文とは?繰り返し処理のメリット

1. PHPのfor文とは?繰り返し処理のメリット
1. PHPのfor文とは?繰り返し処理のメリット

プログラミングの世界では、同じ動作を何度も実行させたい場面が頻繁にあります。例えば、1から100までの数字を順番に表示したり、名簿に登録された全員にメールを送ったりする作業です。これを手作業で1行ずつ書くのは非効率ですし、書き間違い(バグ)の原因にもなります。

PHPのfor文(フォーぶん)は、あらかじめ決まった回数だけ処理を繰り返したいときに最もよく使われる制御構造のひとつです。これを使うことで、コードがスッキリと整理され、修正も簡単になります。パソコンに単純作業を任せる、プログラミングの醍醐味とも言える機能です。

2. カウンタ変数の役割と基本的な仕組み

2. カウンタ変数の役割と基本的な仕組み
2. カウンタ変数の役割と基本的な仕組み

for文を理解する上で欠かせないのがカウンタ変数という考え方です。これは、今「何回目の繰り返しなのか」を数えておくための、いわば「数字を記録する箱」のようなものです。

一般的に、この変数には $i という名前が使われることが多いです。なぜ $i なのかというと、英語で「繰り返す」を意味する「iterate(イテレート)」や「index(インデックス)」の頭文字をとっているからです。もちろん他の名前でも動きますが、慣習として $i を使うと他のプログラマーが見たときにも分かりやすくなります。

このカウンタ変数が、設定した条件を満たしている間、プログラムはずっと同じ動きを繰り返します。条件から外れた瞬間に、繰り返しは終了し、次の処理へと進んでいきます。

3. for文の書き方と構文ルールを覚えよう

3. for文の書き方と構文ルールを覚えよう
3. for文の書き方と構文ルールを覚えよう

for文は、カッコの中に3つの要素をセミコロン(;)で区切って記述します。まずは基本の形を見てみましょう。


for (初期化式; 条件式; 変化式) {
    // 繰り返したい処理
}

それぞれの役割は以下の通りです。

  • 初期化式:ループを開始するときの最初の値を設定します(例:$i = 1)。
  • 条件式:いつまで繰り返すかを決めます。この条件が正しい(真)間は処理が続きます(例:$i <= 10)。
  • 変化式:1回の処理が終わるごとに、カウンタ変数の値をどう変化させるかを決めます(例:$i++ で1ずつ増やす)。
[Image of for loop flow chart]

4. 実際に動かしてみよう!数値を表示する基本コード

4. 実際に動かしてみよう!数値を表示する基本コード
4. 実際に動かしてみよう!数値を表示する基本コード

それでは、具体的に1から5までの数字を表示するプログラムを書いてみましょう。パソコンがどのように数字を数えていくのか、イメージしながら確認してください。


for ($i = 1; $i <= 5; $i++) {
    echo $i . '回目の処理です<br>';
}

実行結果は以下のようになります。


1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です

このコードでは、まず $i が1からスタートし、1回処理が終わるたびに $i++(インクリメントといいます)によって1ずつ増えていきます。$i が6になったとき、条件式の「5以下である」というルールを満たさなくなるため、ループが終了します。

5. 演算子を使った条件設定のバリエーション

5. 演算子を使った条件設定のバリエーション
5. 演算子を使った条件設定のバリエーション

条件式では「比較演算子」を使います。初心者が特につまずきやすいのが、いつまで繰り返すかの境界線です。例えば $i < 10 と書くと、10は含まれず9までとなりますが、$i <= 10 と書けば10まで含まれます。

また、増やすだけでなく減らすことも可能です。例えばカウントダウンを作る場合は、変化式に $i--(デクリメント)を使います。プログラミング未経験の方は、まず「イコールが含まれるかどうか」を意識して書く練習をすると、思い通りの回数を制御できるようになります。

6. 応用編!ステップ数を変えて繰り返しを実行する

6. 応用編!ステップ数を変えて繰り返しを実行する
6. 応用編!ステップ数を変えて繰り返しを実行する

毎回1ずつ増やすだけでなく、2ずつ、あるいは5ずつ増やして処理を飛ばすこともできます。例えば「0から10までの偶数だけを表示したい」という場合は、変化式を工夫します。


for ($i = 0; $i <= 10; $i += 2) {
    echo '偶数の値:' . $i . '<br>';
}

実行結果は以下の通りです。


偶数の値:0
偶数の値:2
偶数の値:4
偶数の値:6
偶数の値:8
偶数の値:10

$i += 2 というのは、「今の値に2を足して上書きする」という意味の命令です。このように変化式を書き換えるだけで、柔軟な繰り返し処理が作れるようになります。

7. HTMLのテーブルやリストを自動生成する

7. HTMLのテーブルやリストを自動生成する
7. HTMLのテーブルやリストを自動生成する

実際のWebサイト制作では、for文を使ってHTMLのタグを効率的に出力することがよくあります。例えば、買い物サイトの個数選択プルダウンメニュー(1個〜10個)を自動で作ってみましょう。


<select name="quantity">
<?php
for ($i = 1; $i <= 10; $i++) {
    echo '<option value="' . $i . '">' . $i . '個</option>';
}
?>
</select>

このように書くことで、HTMLのコードを10行手書きする必要がなくなります。もし「100個までに増やしてほしい」と言われても、条件式の数字を100に変えるだけで一瞬で修正が終わります。これがプログラムによる自動化の強力なパワーです。

8. 注意点!無限ループに陥らないために

8. 注意点!無限ループに陥らないために
8. 注意点!無限ループに陥らないために

for文を使うときに最も気をつけなければならないのが無限ループです。無限ループとは、終了条件がいつまでも満たされないために、プログラムが永遠に動き続けてしまう現象のことです。

例えば、変化式を書き忘れたり、条件式を間違えて $i が減り続けるように設定してしまったりすると、パソコンのメモリを大量に消費し、ブラウザがフリーズしたり、サーバーに負荷をかけたりしてしまいます。もし自分のプログラムが止まらなくなったときは、慌てずにブラウザを閉じるか、実行を停止させる操作を行いましょう。コードを書くときは、必ず「いつかは終わる条件になっているか」を確認する癖をつけるのが上達の近道です。

9. 配列と組み合わせた高度な繰り返し処理

9. 配列と組み合わせた高度な繰り返し処理
9. 配列と組み合わせた高度な繰り返し処理

最後に、少しだけ発展的な内容を紹介します。PHPには「配列(はいれつ)」という、複数のデータをまとめて管理する仕組みがあります。これとfor文を組み合わせると、データのリストを順番に処理できます。


$colors = ['赤', '青', '黄', '緑'];
$count = count($colors); // 配列の中身がいくつあるか数える

for ($i = 0; $i < $count; $i++) {
    echo 'カラーリスト' . ($i + 1) . '番目は' . $colors[$i] . 'です<br>';
}

実行結果はこちらです。


カラーリスト1番目は赤です
カラーリスト2番目は青です
カラーリスト3番目は黄です
カラーリスト4番目は緑です

配列の順番は「0」から数える決まりがあるため、初期化式を $i = 0 とするのがポイントです。このように、データの個数に合わせて自動で繰り返す処理は、実務でも非常によく使われます。最初は難しく感じるかもしれませんが、まずは自分で数字を変えて何度も実行してみることが、理解への一番の近道ですよ。

まとめ

まとめ
まとめ

今回の記事では、PHPにおける繰り返し処理の王道である「for文」について、その基礎から応用までを詳しく解説してきました。プログラミングにおいて、同じ作業を自動化することは、開発効率を飛躍的に高めるだけでなく、人為的なミスを減らすための最も重要なステップです。for文は、回数が決まっているループ処理において非常に強力な武器となります。

for文の構造を再確認しよう

for文の構文は一見複雑に見えるかもしれませんが、「どこから始めるか(初期化式)」「いつまで続けるか(条件式)」「一回ごとにどう変化させるか(変化式)」の3要素で構成されています。この3つのパーツをセミコロンで区切って記述するルールを徹底して覚えましょう。


for ($i = 0; $i < 10; $i++) {
    // ここに繰り返したい命令を記述します
    // $iが0から始まり、9まで合計10回実行されます
}

実務で役立つ具体的な活用シーン

for文は、単に数字を表示するだけではありません。Web制作の現場では、データベースから取得した情報をリスト形式で表示したり、日付の選択肢をプルダウンメニューで生成したりといった場面で頻繁に利用されます。例えば、2026年から10年分の西暦を選択できるフォームを作成する場合、以下のように記述できます。


echo '<select name="year" class="form-select">';
for ($year = 2026; $year <= 2035; $year++) {
    echo '<option value="' . $year . '">' . $year . '年</option>';
}
echo '</select>';

このように、Bootstrap 5のクラス属性などを組み合わせることで、デザイン性の高いUI部品をプログラムで一括生成することが可能です。手書きで10行のoptionタグを書く手間が省けるだけでなく、将来的に期間を20年に延ばしたい場合も、条件式の数値を変更するだけで対応できる保守性の高さが魅力です。

ループ制御の注意点とベストプラクティス

初心者の方が陥りやすい罠として、「無限ループ」と「オフバイワン・エラー(1回多い、または少ないミス)」があります。無限ループを防ぐためには、変化式($i++など)が正しく記述されているか、条件式がいずれ偽(false)になる設計になっているかを必ず確認してください。

また、配列の要素を処理する場合は、配列のインデックスが「0」から始まることに注意し、条件式には「未満(<)」を使うのが一般的です。


$members = ["田中", "佐藤", "鈴木", "高橋"];
$count = count($members);

// 0番目から3番目まで(計4回)繰り返す
for ($i = 0; $i < $count; $i++) {
    echo '<div class="alert alert-info">会員名:' . $members[$i] . '様</div>';
}

実行結果は以下のようになります。


会員名:田中様
会員名:佐藤様
会員名:鈴木様
会員名:高橋様

さらなるステップアップに向けて

for文をマスターしたら、次は「foreach文」や「while文」といった他の繰り返し処理についても学んでみましょう。PHPにはデータの種類や目的に応じた最適なループ処理が用意されています。しかし、すべての基本は今回学んだ「条件によって処理を繰り返す」という考え方に集約されています。

まずは、自分でカウンタ変数の初期値を変えてみたり、変化式を $i += 5 にして5飛ばしで表示させてみたりと、コードを書き換えて実験してみてください。実際に手を動かしてエラーを出し、それを解決するプロセスこそが、プログラミングスキルを向上させる最短ルートです。この記事が、皆さんのPHP学習における確かな一歩となることを願っています。

先生と生徒の振り返り会話

生徒

先生、お疲れ様です!for文の使い方がやっとイメージできました。要するに「スタート地点」「ゴール地点」「歩幅」を決めてあげる感じですね!

先生

素晴らしい例えですね!その通りです。初期化式でスタート位置を決め、条件式でゴールを定め、変化式で一歩の大きさを決める。この3つのバランスが崩れると、ゴールにたどり着けなかったり、逆に止まらなくなったりするわけです。

生徒

無限ループの話を聞いたときは少し怖かったですが、条件式をしっかり確認すれば大丈夫そうですね。あと、HTMLのセレクトボックスを自動で作る方法は、実際の仕事でもすぐに使えそうです!

先生

そうですね。Webシステム開発において、動的にHTMLを生成するのは日常茶飯事です。for文の中で変数の値をHTMLタグの属性(valueなど)に埋め込む手法は、PHPの基本中の基本ですよ。

生徒

配列と組み合わせる方法も、最初は $i = 0 から始めるのが不思議でしたが、配列の番号が0番から数えるというルールを知って納得しました。

先生

そこに気づけたのは大きな進歩です!「0から始まる」感覚に慣れると、プログラミングの世界がぐっと身近になります。次は、for文の中にさらに別のfor文を入れる「二重ループ」などにも挑戦してみましょうか。

生徒

二重ループですか!?難しそうですが、もっと効率的にコードが書けそうでワクワクします。先生、これからも教えてください!

カテゴリの一覧へ
新着記事
New2
Symfony
SymfonyでAPI向けにカスタムエラーメッセージを返す方法を解説!初心者でも安心のバリデーション基礎
New3
Symfony
Symfonyの動的フォームフィールド追加・削除を完全ガイド!初心者でもわかるフォーム操作入門
New4
Laravel
LaravelのMailableクラスの使い方を完全解説!初心者でもできるメール送信管理
人気記事
No.1
Java&Spring記事人気No1
CodeIgniter
CodeIgniterのセッション管理を徹底解説!値を保存・取得する基本操作
No.2
Java&Spring記事人気No2
Laravel
Laravelのnow()・today()関数の使い方完全ガイド!初心者でもわかる日時処理と日付操作
No.3
Java&Spring記事人気No3
Laravel
Laravelのabort()関数でエラーを返す方法!初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Symfony
Symfony Twig入門|条件分岐とループをやさしく理解するテンプレート活用術
No.5
Java&Spring記事人気No5
Laravel
Laravelの日付バリデーションの使い方を完全解説!初心者でも安心の丁寧ガイド
No.6
Java&Spring記事人気No6
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelの@eachディレクティブで簡単に繰り返しテンプレートを表示する方法
No.8
Java&Spring記事人気No8
Laravel
LaravelのThrottleミドルウェアでアクセス制限を実装する方法!初心者向け解説