【PHP】レッスン2-05:for文による繰り返し処理

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:for文による繰り返し処理

この記事の練習問題を解くために必要な知識:
比較演算子と論理演算子if文による分岐処理条件演算子switch文による分岐処理for文による繰り返し処理while文による繰り返し処理繰り返しの制御エラーメッセージ例外処理

<<前のページ PHP記事一覧 次のページ>>

PHPの「for文による繰り返し処理」とは

この章ではPHPにおける「for文による繰り返し処理」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。




PHPのプログラミングでは、同じ処理を何度も繰り返す必要がある場合があります。

これを効率的に実現するのが「for文」です。

for文を使うことで、特定の条件を満たすまでループ処理を実行できます。

for文の基本構文

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

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

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

使用例:簡単なカウントアップの例

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

for ($i = 1; $i <= 5; $i++) {
    echo "現在の数字は: $i" . PHP_EOL; // PHP_EOLは改行を表します
}

このコードの動作を説明します:

  1. 初期化式で$iを1に設定します。
  2. 条件式$i <= 5がtrueの場合、ループ内の処理を実行します。
  3. 処理実行後、更新式$i++$iの値を1増やします。
  4. $iが5を超えるまでこれを繰り返します。

結果として、以下の出力が得られます:

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

使用例:ネストされたfor文による応用

for文は入れ子にすることも可能です。

例えば、九九表を出力する場合のコードは次のようになります:

for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= 9; $j++) {
        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文は一定回数の繰り返し処理を実現するための非常に便利な制御構造です。

初期化式、条件式、更新式を正しく設定することで、多様なループ処理が可能になります。

初めはシンプルな例から始め、徐々に複雑な使い方に挑戦してみてください!

for文による繰り返し処理の練習問題:ランダム数列を生成して合計を計算しよう

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

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

この問題の要件

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

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

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

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

この問題を解くヒント

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

ヒント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文
  □ 「正しい整数を入力してください。」を出力

ヒント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;
}

以上がこの問題の穴埋めコードです。

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



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

<?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;
}

正解コードの解説

今回作成したコードはユーザー入力を利用してランダムな数列を生成し、その合計を計算するプログラムです。

このコードで使用されているfor文を中心に、各部分の内容を詳しく解説していきます。

入力の取得と変換

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: 合計値とともに改行して結果を表示します。

まとめ

このプログラムではfor文を使った繰り返し処理を中心に学びました。特に以下のポイントに注目してください:

  1. for文の基本構造:初期化、条件、更新の流れを理解することで、柔軟な繰り返し処理が可能になります。
  2. ランダム値の生成mt_randを使用することで、動的なデータを作成できます。
  3. 合計値の計算:ループ内でデータを処理し、結果を累積する手法を学びました。

このプログラムは、PHPにおける繰り返し処理や基本的な数値操作を練習するのに最適です。

これを応用してさらに複雑な処理にも挑戦してみてください!

<<前のページ PHP記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    PHPのテキスト&問題集トップへ戻る
    トップページへ戻る