【PHP】レッスン2-04:switch文による分岐処理を理解しよう

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

この記事で学べる知識:switch文による分岐処理

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

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

PHPの「switch文による分岐処理」とは

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




PHPでは特定の条件に応じて異なる処理を実行するために分岐処理を使用します。

その中でも複数の条件を効率的に処理する場合に有効なのが switch文 です。

本記事ではswitch文の基本的な使い方と注意点について解説します。

switch文とは?

switch文は指定した条件の値に基づいて処理を分岐する制御構造です。

if文 と似ていますが、多数の条件を扱う際にコードが見やすくなる利点があります。

例えばユーザーが入力した数字に応じて異なるメッセージを表示するような場合に便利です。

以下はswitch文の基本的な構文です。

switch (式) {
    case 値1:
        // 値1の場合に実行する処理
        break;
    case 値2:
        // 値2の場合に実行する処理
        break;
    default:
        // どれにも当てはまらない場合に実行する処理
}
  • : 評価される値を指定します。この値が各 case の値と比較されます。
  • case: 条件に一致した場合に実行される処理を記述します。
  • break: 処理を終了して switch 文の外に出るための記述です。これがないと次の case の処理も続けて実行されてしまいます。
  • default: どの case にも一致しない場合に実行される処理を記述します。省略可能ですが、エラーハンドリングやデフォルト動作を指定するために使用するのが一般的です。

switch文の使用例

次にswitch文の実際の使用例を見てみましょう。

例1: 曜日を判定するプログラム

<?php
$day = '火曜日';

switch ($day) {
    case '月曜日':
        echo "週の始まりです!";
        break;
    case '金曜日':
        echo "もうすぐ週末です!";
        break;
    case '土曜日':
    case '日曜日':
        echo "週末を楽しみましょう!";
        break;
    default:
        echo "平日の一日です。";
}
  1. $day 変数に「火曜日」を代入しています。
  2. switch文では、case の条件と $day の値が一致するかを確認します。
  3. 一致する条件が見つかれば、その部分の処理を実行し、break によって終了します。
  4. どの条件にも一致しない場合は default の処理が実行されます。

例2: 数値による処理の分岐

<?php
$score = 85;

switch (true) {
    case ($score >= 90):
        echo "評価: A";
        break;
    case ($score >= 80):
        echo "評価: B";
        break;
    case ($score >= 70):
        echo "評価: C";
        break;
    default:
        echo "評価: D";
}
  • この例ではswitch文の条件式に true を指定し、各ケース内で条件式を評価しています。
  • $score が 85 なので、($score >= 80) の条件に一致し、「評価: B」が出力されます。

switch文を使うメリットと注意点

メリット:

  • コードの可読性が向上する: if-else を多用する場合と比べ、コードが簡潔で見やすくなります。
  • 条件が多い場合に適している: 数値や文字列を比較する際に効率的に処理を行えます。

注意点:

  1. break の忘れ: break を忘れると、後続の条件まで処理が実行されてしまいます。これを「フォールスルー」と呼びます。
  2. 条件の厳密性: PHPでは、switch 文は厳密な比較(===)ではなく緩やかな比較(==)を行うため、型の違いに注意が必要です。
    例: 0'0' は一致します。

まとめ

  • switch文 は条件の値に応じて異なる処理を実行するための構文です。
  • 基本構文を理解しbreakdefault の使い方を適切に実践することで、安全かつ効率的なコードを書くことができます。
  • 特に条件が多い場合に可読性の向上に役立ちます。

PHP初心者の方はまず簡単な例を試して動作を確認してみましょう!

switch文による繰り返し処理の練習問題:条件に応じた分岐処理を体験しよう

1〜3の数字を入力すると、それに応じたメッセージを出力するプログラムを作成してください。

このプログラムではswitch文を使って分岐処理を行い、それぞれの数字に対応したメッセージを表示します。

また1〜3以外の数字が入力された場合にはエラーメッセージを表示し、プログラムが終了するようにします。

この問題の要件

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

  1. コンソールに「1〜3の数字を入力してください: 」と表示してユーザー入力を受け付けること。
  2. ユーザーが入力した値を整数型に変換すること。
  3. switch文を使用して以下の分岐処理を実装すること。
    • case 1: 「選択されたのは「1」です!これは最初の選択です。」と表示する。
    • case 2: 「選択されたのは「2」です!真ん中の数字ですね。」と表示する。
    • case 3: 「選択されたのは「3」です!最後の選択です。」と表示する。
    • default: 「1〜3の数字を入力してください。」と表示する。
  4. プログラム終了時に「プログラムを終了します。」と表示すること。

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

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

1〜3の数字を入力してください: 1
選択されたのは「1」です!これは最初の選択です。
プログラムを終了します。

この問題を解くヒント

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

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

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

1:「1〜3の数字を入力してください: 」と出力して改行
2:ユーザー入力を整数型に変換し、変数$inputに代入
3:switch文で変数$inputの値に応じた処理を分岐
  □ case 1の場合、「選択されたのは『1』です!これは最初の選択です。」と出力して改行し、breakで処理を終了
  □ case 2の場合、「選択されたのは『2』です!真ん中の数字ですね。」と出力して改行し、breakで処理を終了
  □ case 3の場合、「選択されたのは『3』です!最後の選択です。」と出力して改行し、breakで処理を終了
  □ defaultの場合、「1〜3の数字を入力してください。」と出力して改行
4:「プログラムを終了します。」と出力して改行

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

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

<?php

echo "1〜3の数字を入力してください: ";
$input = (int)trim(fgets(STDIN)); // ユーザー入力を整数として取得

// 入力値に応じてメッセージを分岐させる
/*【穴埋め問題1】
ここにswitch文を使用して、入力された数字に応じたメッセージを出力するコードを書いてください。
具体的には以下の内容を実装してください。
- case 1: 「選択されたのは『1』です!これは最初の選択です。」と出力して改行する。
- case 2: 「選択されたのは『2』です!真ん中の数字ですね。」と出力して改行する。
- case 3: 「選択されたのは『3』です!最後の選択です。」と出力して改行する。
- それ以外の数字の場合、「1〜3の数字を入力してください。」と出力して改行する。
*/

echo "プログラムを終了します。" . PHP_EOL;

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

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



練習問題の解答と解説

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

正解コードの例

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

<?php

echo "1〜3の数字を入力してください: ";
$input = (int)trim(fgets(STDIN)); // ユーザー入力を整数として取得

// 入力値に応じてメッセージを分岐させる
switch ($input) {
    case 1:
        echo "選択されたのは「1」です!これは最初の選択です。" . PHP_EOL;
        break; // 各caseブロックの終了を示す
    case 2:
        echo "選択されたのは「2」です!真ん中の数字ですね。" . PHP_EOL;
        break;
    case 3:
        echo "選択されたのは「3」です!最後の選択です。" . PHP_EOL;
        break;
    default:
        // 入力が1〜3以外の場合の処理
        echo "1〜3の数字を入力してください。" . PHP_EOL;
        break;
}

// プログラムの終了
echo "プログラムを終了します。" . PHP_EOL;

正解コードの解説

今回作成したプログラムはユーザーが1〜3の数字を入力すると、それに応じたメッセージを表示するプログラムです。

このコードではswitch文を使った分岐処理を学ぶことができます。コードの各部分について詳しく説明します。

ユーザー入力の処理

echo "1〜3の数字を入力してください: ";
$input = (int)trim(fgets(STDIN));
  • echo: 画面にメッセージを表示します。ここでは、ユーザーに数字を入力するよう促す文を表示します。
  • fgets(STDIN): ユーザーの入力を取得します。STDINは標準入力(コンソール入力)を意味します。
  • trim(): ユーザー入力の前後の空白や改行を取り除きます。
  • (int): 取得した入力を整数型に変換します。これにより、文字列ではなく数値として扱うことができます。

switch文による分岐処理

switch ($input) {
    case 1:
        echo "選択されたのは「1」です!これは最初の選択です。" . PHP_EOL;
        break;
    case 2:
        echo "選択されたのは「2」です!真ん中の数字ですね。" . PHP_EOL;
        break;
    case 3:
        echo "選択されたのは「3」です!最後の選択です。" . PHP_EOL;
        break;
    default:
        echo "1〜3の数字を入力してください。" . PHP_EOL;
        break;
}
  1. switch ($input): $inputの値に基づいて分岐処理を行います。
  2. case 1, case 2, case 3: 各caseは、入力値がそれぞれ123の場合に対応する処理を実行します。
    • echo: 指定のメッセージを表示します。
    • break: それ以上のcaseを実行しないように処理を終了します。
  3. default: 入力値が123以外の場合に実行される処理です。「1〜3の数字を入力してください。」というエラーメッセージを表示します。

プログラムの終了

echo "プログラムを終了します。" . PHP_EOL;

プログラムの終了を明示的に知らせるメッセージを表示します。

まとめ

このプログラムではswitch文を用いた分岐処理を学びました。

switch文は条件ごとに異なる処理を実行するための便利な構文です。特に複数の条件を整理して記述する際に有効です。

このコードを実際に入力して実行しながら、以下のポイントを意識しましょう:

  1. ユーザーが入力した値に基づく処理の切り替え。
  2. 各caseに適切にbreak文を配置することの重要性。
  3. defaultケースの役割(不正な入力に対するエラーメッセージの表示)。

実際に動かしてみて、入力を変えた際の挙動を確認してみてください。switch文の柔軟性と便利さを実感できるはずです!

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

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

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

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






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