【PHP】Lesson2-4:switch文による分岐処理を理解しよう

ながみえ

一つ前のレッスンでは 三項演算子 について学習しました。

今回は switch文による分岐処理 について見ていきましょう。

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:クラス

<<前のページ

学習記事一覧

次のページ>>

switch文による分岐処理の基本とif文との違い

PHPで複数の条件をすっきり分岐できる「switch文」の基本を、初心者向けにわかりやすく解説します。

本記事では、switch文の構文や使い方、if文との違い、実際の活用例まで丁寧に紹介。

これを身につければ、複数ケースの条件分岐や判定処理をよりシンプルに書けるようになります。

ぜひ最後まで読んで、PHP分岐処理の幅を広げましょう!

switch文とは何か?|概要と基本構文の解説

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

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

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

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

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

switch文を使用したコード例|2つのパターンを紹介

switch文を使用したコードの例を2つ見てみましょう。

例1:曜日によって異なるメッセージを出力するコード

曜日を指定し、その曜日によって異なるメッセージを表示するコードの例です。

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

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

例2:スコアに応じて評価を出す条件分岐の使い方

以下は、テストの点数に応じて異なるメッセージを表示するコードの例です。

<?php
$score = 85;

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

PHP switch文の利点・注意点|if文との違い徹底解説

switch文を利用するメリットやデメリット同じ条件分岐の構文であるif文との違いを以下に紹介します。

switch文のメリット|コードの見通しをよくする方法

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

switch文の注意点|break忘れと型の緩い比較に注意

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

switch文とif文との違い

if文との違いを一覧で紹介します。

比較項目switchif
主な用途値の等価比較に適している条件式(論理式)の評価に適している
条件の種類同じ変数の複数の値を比較あらゆる論理条件を扱える
柔軟性低い(範囲比較には向かない)高い(範囲・複雑な条件に対応)
可読性多数の値分岐には読みやすい条件が複雑でも記述可能だが読みにくくなる
使用例メニュー選択・曜日・状態の分岐などスコアの評価・ログイン判定など
break の必要性必要(省略すると次のcaseに落ちる)不要

switch(true) を使えば、if-elseif のように条件式の評価も可能になりますが、それでも if の方が柔軟に使用できます。

値のパターンがはっきり決まっている場合(例: '月曜日', '火曜日', …)は、switch文を使用することで読みやすいコードを書くことができます。

まとめ|PHP switch文の使い方・if文との違いと注意点総まとめ

この記事では、PHPのswitch文の基本構文や使い方、実際のコード例、そしてif文との違いや注意点について詳しく学びました。

これにより、複数の条件分岐をより簡潔かつ見やすく実装できるようになったはずです。

基本を押さえた今こそ、実際のプログラムでもどんどんswitch文を活用し、分岐処理の幅を広げていきましょう!

演習問題|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からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント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:「プログラムを終了します。」と出力して改行

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

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

この問題の答え合わせ

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

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

Q
正解コード
<?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;
Q
正解コードの解説

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

ユーザー入力の処理

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;

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

もっと分かりやすい学習サイトにするために

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

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

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました