【PHP】Lesson2-5:for文による繰り返し処理を理解しよう

ながみえ

一つ前のレッスンでは switch文による分岐処理 について学習しました。

今回は for文による繰り返し処理 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編

 ・Lesson2-1:比較演算子と論理演算子
 ・Lesson2-2:if文による分岐処理を理解しよう
 ・Lesson2-3:三項演算子を使いこなそう
 ・Lesson2-4:switch文による分岐処理を理解しよう
 ・Lesson2-5:for文による繰り返し処理を理解しよう ◁今回はココ
 ・Lesson2-6:while文による繰り返し処理を理解しよう
 ・Lesson2-7:繰り返しを制御しよう
 ・Lesson2-8:エラーメッセージを読めるようになろう
 ・Lesson2-9:例外処理を理解しよう
 ・確認問題2-1:ハイアンドロー ゲームを作ろう
 ・確認問題2-2:数字当てゲームを作ろう
 ・確認問題2-3:シンプルなじゃんけんゲームを作ろう
Lesson3:関数編
Lesson4:データ構造編
Lesson5:クラス

<<前のページ

学習記事一覧

次のページ>>

for文による繰り返し処理の基本と応用テクニック

PHPで繰り返し処理を実現する「for文」の基本を、初心者にもわかりやすく解説します。本記事では、for文の構文や使い方、実際のコード例まで丁寧に紹介。

for文を理解すれば、数値のカウントや配列の処理など、さまざまな反復処理を自在に書けるようになります。

ぜひ最後まで読んで、PHPのプログラミング力を一歩アップさせましょう!

for文による繰り返し処理とは?|基本構文とコード例を紹介

for文は、指定された範囲内で同じ処理を何度も繰り返すための構文です。

for文の構文は以下のように書きます:

for (初期化式; 条件式; 更新式) {
    // 繰り返したい処理
}
  • 初期化式:ループの初期値を設定します(例:$i = 0)。
  • 条件式:ループを続ける条件を指定します(例:$i < 3)。
  • 更新式:ループが1回実行されるたびに実行される式です(例:$i++でカウントアップ)。

for文の流れは、初期化 → 条件判定 → 処理実行 → 更新 を繰り返します。

例えば1から5までの数字を順番に出力したい場合、以下のコードを使用できます:

for ($i = 1; $i <= 5; $i++) {	// 変数$iの値が1から5までの間、インクリメントしながら以下の処理を繰り返す
    echo "現在の数字は: $i" . PHP_EOL;	// この処理を繰り返す
}

このコードを実行すると、以下の順序で動作します。

  1. 初期化式で変数$iを1に設定
  2. 1周目:条件式 $i <= 5 がtrueなので、ループ内の処理を実行
  3. 処理実行後、更新式 $i++$iの値が1増えて2となる
  4. 2周目:条件式 $i <= 5 がtrueなので、ループ内の処理を実行
  5. 処理実行後、更新式 $i++$iの値が1増えて3となる
  6. ・・・
  7. 5周目:条件式 $i <= 5 がtrueなので、ループ内の処理を実行
  8. 処理実行後、更新式 $i++$iの値が1増えて6となる
  9. 6周目:条件式 $i <= 5 がfalseなので、ループ終了

すなわち、このコードを実行すると以下のように出力されます。

現在の数字は: 1
現在の数字は: 2
現在の数字は: 3
現在の数字は: 4
現在の数字は: 5

for文の応用例|ネスト構造で九九表を作成

for文は入れ子にする(for文の中にfor文を入れる)ことも可能であり、これをネストすると言います。

例えば、以下のような書くことで九九表を出力することができます。

for ($i = 1; $i <= 9; $i++) {	// 変数$iの値が1から9までの間、インクリメントしながら...
    for ($j = 1; $j <= 9; $j++) {	// 変数$jの値が1から9までの間、インクリメントしながら...
        echo "$i x $j = " . ($i * $j) . PHP_EOL; // 掛け算の結果を出力
    }
    echo PHP_EOL; // 各段ごとに改行
}

このコードのポイント:

  1. 外側のループ$iが1~9まで繰り返されます。
  2. 内側のループ$jが1~9まで繰り返され、$i * $jを計算して出力します。
  3. 内側のループが終了すると、外側のループが次の値に進みます。

出力結果は以下のようになります:

1 x 1 = 1
1 x 2 = 2
...
9 x 9 = 81

まとめ|for文の使い方・応用と繰り返し処理のポイント

この記事では、PHPのfor文による繰り返し処理の基本から、ネスト構造を使った応用例までを学びました。

これで、数値のカウントや複雑な繰り返し処理も自在に書けるようになったはずです。

基礎をしっかり固めた今こそ、実際のプログラムでさまざまな反復処理に挑戦し、さらにスキルアップを目指しましょう!

演習問題|for文でランダム数列を生成し合計を計算しよう

ユーザーから数列の長さを入力してもらい、その長さ分のランダムな整数(1~100)を生成し、それらの合計を計算するプログラムを作成してください。

プログラムは入力値が1以上の整数であるか確認し、不正な入力には適切なメッセージを出力するようにしてください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • PHPのfgetsを使用して、数列の長さをユーザーから入力すること。
  • 入力値が1以上の整数であるか確認し、不正な場合にはエラーメッセージを出力すること。
  • 入力された長さ分のランダムな整数(1~100)をmt_randで生成し、数列として出力すること。
  • 生成された数列の合計を計算し、その値を表示すること。
  • 入力が正しい場合のみ上記の処理を実行し、正しくない場合は処理を中断すること。

ただし、以下のような実行結果となること。

数列の長さを入力してください(1以上の整数):5
生成された数列: 45 78 12 33 89 
数列の合計: 257

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:「数列の長さを入力してください(1以上の整数):」を出力
2:標準入力から値を取得し、整数型に変換して変数$lengthに代入
3:if文で変数$lengthが1以上か判定
  □ 真の場合、変数$sumを0で初期化
  □ 「生成された数列: 」を出力
  □ for文を使い、変数$iが0から$length未満の間繰り返し処理を実行
  □ □ ランダムな整数(1~100の範囲)を生成し、変数$randomNumberに代入
  □ □ 変数$randomNumberの値を出力し、空白を追加
  □ □ 変数$sumに$randomNumberを加算
  □ forループ終了後、「数列の合計: 」と変数$sumの値を出力
4:else文
  □ 「正しい整数を入力してください。」を出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

<?php

// ユーザーに入力を促す
echo "数列の長さを入力してください(1以上の整数):";

// 入力値を取得し整数に変換
$length = (int) fgets(STDIN);

// 入力値が正しいか確認
if ($length > 0) {
    // 合計値を保存する変数を初期化
    $sum = 0;

    echo "生成された数列: ";

    // 指定された長さの数列を生成
    /*【穴埋め問題1】
    ここでfor文を使用して数列を生成し、ランダムな値を生成して合計を計算する処理を書いてください。
    */
    
    // 合計値を改行して表示
    echo PHP_EOL . "数列の合計: $sum" . PHP_EOL;
} else {
    // 入力値が正しくない場合のエラーメッセージ
    echo "正しい整数を入力してください。" . PHP_EOL;
}

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

この問題の答え合わせ

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
<?php

// ユーザーに入力を促す
echo "数列の長さを入力してください(1以上の整数):";

// 入力値を取得し整数に変換
$length = (int) fgets(STDIN);

// 入力値が正しいか確認
if ($length > 0) {
    // 合計値を保存する変数を初期化
    $sum = 0;

    echo "生成された数列: ";

    // 指定された長さの数列を生成
    for ($i = 0; $i < $length; $i++) {
        // ランダムな数値を生成(1~100)
        $randomNumber = mt_rand(1, 100);

        // 数値を表示
        echo $randomNumber . " ";

        // 合計値に加算
        $sum += $randomNumber;
    }

    // 合計値を改行して表示
    echo PHP_EOL . "数列の合計: $sum" . PHP_EOL;
} else {
    // 入力値が正しくない場合のエラーメッセージ
    echo "正しい整数を入力してください。" . PHP_EOL;
}
Q
正解コードの解説

コードをブロックごとに分割して解説します。

入力の取得と変換

echo "数列の長さを入力してください(1以上の整数):";
$length = (int) fgets(STDIN);
  • echo:指定したメッセージをコンソールに出力します。ここではユーザーに入力を求めるメッセージを表示しています。
  • fgets(STDIN):標準入力からデータを取得する関数です。ユーザーが入力した内容を文字列として取得します。
  • (int):文字列を整数型に変換するキャスト操作です。これによりユーザーが入力した値を整数として扱えるようになります。

条件分岐による入力の検証

if ($length > 0) {
    // 正常な場合の処理
} else {
    echo "正しい整数を入力してください。" . PHP_EOL;
}
  • if文:条件がtrueのときに処理を実行します。
  • $length > 0:入力された値が1以上であることを確認しています。
  • else:条件がfalseの場合に実行される処理です。ここではエラーメッセージを出力しています。

for文による繰り返し処理

for ($i = 0; $i < $length; $i++) {
    $randomNumber = mt_rand(1, 100);
    echo $randomNumber . " ";
    $sum += $randomNumber;
}
for文の構造:
  • for文を使うと、指定した回数だけ繰り返し処理を実行できます。
  • $i = 0: ループカウンタの初期値を設定します。ここでは$iを0に初期化しています。
  • $i < $length: 繰り返し処理を続ける条件です。ここでは、ループカウンタが$length未満の場合に繰り返しを続けます。
  • $i++: ループごとにカウンタを1ずつ増加させます。
ランダムな数の生成:
  • mt_rand(1, 100): 1から100の間でランダムな整数を生成します。
合計値の計算:
  • $sum += $randomNumber: 生成したランダムな数を$sumに加算しています。+=は加算代入演算子で、既存の値に指定した値を足します。

出力と改行

echo PHP_EOL . "数列の合計: $sum" . PHP_EOL;
  • PHP_EOL: システムに依存しない改行コードです。
  • echo: 合計値とともに改行して結果を表示します。
もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPHP学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました