switch 文
テクノロジ系 / conditional (if / else / switch / 三項)
switch 文
Lesson 2 / Chapter 5
if/elseif が長くなると読みにくい
<?php
if ($n === 1) {
echo "Mon\n";
} elseif ($n === 2) {
echo "Tue\n";
} elseif ($n === 3) {
echo "Wed\n";
} elseif ($n === 4) {
echo "Thu\n";
}「1 つの値」を「たくさんの候補」と比較する形は、
switch で書くと見通しが良くなる。
switch の基本形
<?php
switch ($n) {
case 1:
echo "Mon\n";
break;
case 2:
echo "Tue\n";
break;
default:
echo "unknown\n";
break;
}switch ($n)で 判定したい値 を渡すcase 1:は「$n が 1 のとき」default:は「どの case にも当たらないとき」
break を忘れると 次の case まで流れる
<?php
switch ($n) {
case 1:
echo "Mon\n";
// break を書き忘れた!
case 2:
echo "Tue\n";
break;
}$n = 1 のとき、出力は:
Mon Tue
breakがないと 次の case も実行される (フォールスルー)- これは 初学者の典型バグ
- 各
caseの最後には 必ずbreak;を書く
default で「それ以外」を受ける
<?php
switch ($grade) {
case "A":
echo "Excellent\n";
break;
case "B":
echo "Good\n";
break;
default:
echo "Other\n";
break;
}defaultは省略してもよい- 省略するとどの case にも当たらない場合 何も実行されない
- 「想定外を検出したい」なら
defaultを書く
switch を使うべきかどうか
| 判定したいこと | 推奨 |
|---|---|
| 1 つの値が「特定の候補のどれか」 | switch |
範囲チェック ($n >= 0 && $n <= 100) | if |
複雑な複合条件 ($a > 0 && $b < 10) | if |
switch は 「値の一致」専用 と覚える。
このチャプターでできるようになること
✅ switch で値の多分岐を書ける
✅ 各 case の最後に break を付けられる
✅ default で「それ以外」を受けられる
✅ break 忘れによるフォールスルー事故を防げる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — 数字を曜日名に変換
問題
標準入力で 1〜7 の整数を 1 行受け取り、
対応する曜日名を出力してください。1-7 以外なら unknown を出力します。
| 入力 | 出力 |
|---|---|
| 1 | Mon |
| 2 | Tue |
| 3 | Wed |
| 4 | Thu |
| 5 | Fri |
| 6 | Sat |
| 7 | Sun |
| その他 | unknown |
判定には switch 文を使うこと。
入力例:
3
期待される出力:
Wed
採点
php scripts/grade.php topics/conditional/ch05-switch/drill/01-day-name/
ヒント
$n = (int) trim(fgets(STDIN));で整数として読むswitch ($n) { case 1: ... break; ... default: ... }- 各 case の最後に
break;を忘れない
ドリル 02 — grade を合格/不合格に振り分け
問題
標準入力で grade を 1 行受け取ります。値は A B C D のいずれかです。
C 以上 (= A / B / C) なら pass、D なら fail を出力してください。
判定には switch 文を使うこと。
ヒント: A と B と C で同じ処理にしたい場合は、case "A": と case "B": を続けて書いて break を省略する書き方が使えます。
| 入力 | 出力 |
|---|---|
| A | pass |
| B | pass |
| C | pass |
| D | fail |
入力例:
B
期待される出力:
pass
採点
php scripts/grade.php topics/conditional/ch05-switch/drill/02-grade/
ヒント
$grade = trim(fgets(STDIN));で文字列として読む- 複数 case を 1 つの処理にまとめる:
case "A":
case "B":
case "C":
echo "pass\n";
break;