【PHP】Lesson2-4:switch文の使い方と条件分岐の基礎を学ぼう

PHPでは特定の条件に応じて異なる処理を実行するために分岐処理を使用します。
その中でも複数の条件を効率的に処理する場合に有効なのが 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文とは?PHPで条件分岐を効率化する方法

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 "平日の一日です。"; }
$day
変数に「火曜日」を代入しています。- switch文では、
case
の条件と$day
の値が一致するかを確認します。 - 一致する条件が見つかれば、その部分の処理を実行し、
break
によって終了します。 - どの条件にも一致しない場合は
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文との違いもチェック
switch文のメリット|コードの見通しをよくする方法
- コードの可読性が向上する:
if-else
を多用する場合と比べ、コードが簡潔で見やすくなります。 - 条件が多い場合に適している: 数値や文字列を比較する際に効率的に処理を行えます。
switch文の注意点|break忘れと型の緩い比較に注意
break
の忘れ:break
を忘れると、後続の条件まで処理が実行されてしまいます。これを「フォールスルー」と呼びます。- 条件の厳密性: PHPでは、
switch
文は厳密な比較(===)ではなく緩やかな比較(==)を行うため、型の違いに注意が必要です。
例:0
と'0'
は一致します。
switch文まとめ|初心者が押さえておくべきポイント
switch文
は条件の値に応じて異なる処理を実行するための構文です。- 基本構文を理解し
break
やdefault
の使い方を適切に実践することで、安全かつ効率的なコードを書くことができます。 - 特に条件が多い場合に可読性の向上に役立ちます。
PHP初心者の方はまず簡単な例を試して動作を確認してみましょう!
演習問題|switch文で入力値に応じたメッセージを表示する処理を作ろう

1〜3の数字を入力すると、それに応じたメッセージを出力するプログラムを作成してください。
このプログラムではswitch文を使って分岐処理を行い、それぞれの数字に対応したメッセージを表示します。
また1〜3以外の数字が入力された場合にはエラーメッセージを表示し、プログラムが終了するようにします。
この問題の要件
以下の要件に従ってコードを完成させてください。
- コンソールに「1〜3の数字を入力してください: 」と表示してユーザー入力を受け付けること。
- ユーザーが入力した値を整数型に変換すること。
- switch文を使用して以下の分岐処理を実装すること。
- case 1: 「選択されたのは「1」です!これは最初の選択です。」と表示する。
- case 2: 「選択されたのは「2」です!真ん中の数字ですね。」と表示する。
- case 3: 「選択されたのは「3」です!最後の選択です。」と表示する。
- default: 「1〜3の数字を入力してください。」と表示する。
- プログラム終了時に「プログラムを終了します。」と表示すること。
ただし、以下のような実行結果となること。
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;
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
ユーザー入力の処理
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; }
- switch ($input):
$input
の値に基づいて分岐処理を行います。 - case 1, case 2, case 3: 各caseは、入力値がそれぞれ
1
、2
、3
の場合に対応する処理を実行します。- echo: 指定のメッセージを表示します。
- break: それ以上のcaseを実行しないように処理を終了します。
- default: 入力値が
1
、2
、3
以外の場合に実行される処理です。「1〜3の数字を入力してください。」というエラーメッセージを表示します。
プログラムの終了
echo "プログラムを終了します。" . PHP_EOL;
プログラムの終了を明示的に知らせるメッセージを表示します。
まとめ
このプログラムではswitch文を用いた分岐処理を学びました。
switch文は条件ごとに異なる処理を実行するための便利な構文です。特に複数の条件を整理して記述する際に有効です。
このコードを実際に入力して実行しながら、以下のポイントを意識しましょう:
- ユーザーが入力した値に基づく処理の切り替え。
- 各caseに適切にbreak文を配置することの重要性。
- defaultケースの役割(不正な入力に対するエラーメッセージの表示)。
実際に動かしてみて、入力を変えた際の挙動を確認してみてください。switch文の柔軟性と便利さを実感できるはずです!