基礎

PHPのfor文入門|繰り返し回数が決まっているループ処理

PHPのfor文は、繰り返し回数が明確に決まっている場合に最適なループ構造です。初期化、条件式、更新処理を1行にまとめて記述できるため、while文よりも簡潔にカウンタベースのループを書けます。

この記事では、for文の基本構文から、さまざまな繰り返しパターン、実践的な活用例まで詳しく解説します。

基本的な使い方

for文は3つの式(初期化式・条件式・更新式)をセミコロンで区切って記述します。

PHP
<?php
//    初期化    条件     更新
for ($i = 0; $i < 5; $i++) {
    echo $i . "回目の処理\n";
}
?>
実行結果
0回目の処理
1回目の処理
2回目の処理
3回目の処理
4回目の処理

$i = 0(初期化式)はループ開始前に1回だけ実行されます。$i < 5(条件式)は各繰り返しの前に評価され、falseになるとループが終了します。$i++(更新式)は各繰り返しの後に実行されます。

さまざまな繰り返しパターン

PHP
<?php
// カウントダウン
echo "カウントダウン: ";
for ($i = 5; $i >= 1; $i--) {
    echo "$i ";
}
echo "\n";

// 2ずつ増加
echo "偶数: ";
for ($i = 0; $i <= 10; $i += 2) {
    echo "$i ";
}
echo "\n";

// 3ずつ増加
echo "3の倍数: ";
for ($i = 3; $i <= 15; $i += 3) {
    echo "$i ";
}
echo "\n";
?>
実行結果
カウントダウン: 5 4 3 2 1
偶数: 0 2 4 6 8 10
3の倍数: 3 6 9 12 15

九九の表を作る

for文をネスト(入れ子)にすることで、二次元的な処理が可能です。

PHP
<?php
for ($i = 1; $i <= 9; $i++) {
    $row = "";
    for ($j = 1; $j <= 9; $j++) {
        $result = $i * $j;
        $row .= str_pad($result, 4, " ", STR_PAD_LEFT);
    }
    echo $row . "\n";
}
?>
実行結果
   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81

実践的な使用例

PHP
<?php
// FizzBuzz問題
for ($i = 1; $i <= 20; $i++) {
    if ($i % 15 === 0) {
        echo "FizzBuzz ";
    } elseif ($i % 3 === 0) {
        echo "Fizz ";
    } elseif ($i % 5 === 0) {
        echo "Buzz ";
    } else {
        echo "$i ";
    }
}
echo "\n";
?>
実行結果
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz
配列の繰り返しにはforeachが便利

配列の全要素を順番に処理する場合は、for文よりもforeach文の方が簡潔に書けます。for文はインデックスが必要な場合や、特定のステップで繰り返したい場合に使いましょう。

ループ内でcount()を毎回呼ばない

for ($i = 0; $i < count($array); $i++) のように条件式にcount()を書くと、毎回count()が呼ばれてパフォーマンスが低下します。$len = count($array); で事前に変数に格納しましょう。

まとめ

  • for文は初期化・条件・更新を1行にまとめられるループ構造
  • 繰り返し回数が決まっている場合に最適
  • 更新式を変えることでカウントダウンや2ずつ増加などが可能
  • for文をネストすることで二次元的な処理ができる
  • 配列の全要素を処理する場合はforeach文の方が適している