PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのswitchステートメントの使い方をわかりやすく解説

はじめに

プログラムの中で、式の値に応じて異なる処理を実行したい場合、if文を何度も重ねて書くと、それぞれに波括弧が付いてコードが冗長で読みにくくなってしまいます。そこで活躍するのがswitch-case構文です。switch構文を使えば、同じ変数(または式)を複数の異なる値と比較し、一致した値ごとに異なるコードを実行できます。その結果、プログラムはよりコンパクトで可読性の高いものになります。

基本構文

switch (expr) {
    case val1:
        expr が val1 と等しい場合に実行するコード;
        break;
    case val2:
        expr が val2 と等しい場合に実行するコード;
        break;
    ...
    ...
    default:
        expr が上記のどの値とも一致しない場合に実行するコード;
}

各caseブロックの末尾には必ずbreak文を記述しましょう。breakを忘れると、条件が一致した後も処理がそのまま次以降のcaseブロックへ流れてしまう(フォールスルー)ためです。

次の例では、ユーザーに2つの数値と、実行したい演算の種類を表す数値(1/2/3/4 = 加算/減算/乗算/除算)を入力してもらいます。

使用例

<?php
$first=(int)readline("数値を入力してください:");
$second=(int)readline("もう一つの数値を入力してください:");
$x=readline("1/2/3/4 のいずれかを入力してください(加算/減算/乗算/除算):");
$result=0;
switch($x){
    case 1: echo $first+$second; break;
    case 2: echo $first-$second; break;
    case 3: echo $first*$second; break;
    case 4: echo $first/$second; break;
    default: echo "正しくない入力です";
}
?>

実行結果

このコードを実行すると、たとえば次のような結果が出力されます。

正しくない入力です

これは、入力された値が1〜4のいずれにも該当せず、defaultブロックが実行された例です。

defaultキーワードの役割

defaultキーワードは、switch式がどのcaseとも一致しなかった場合に実行される処理を指定するために使います。いわば「それ以外全部」を受け持つブロックであり、予期しない入力への対応などに役立ちます。

空のcaseブロックによるフォールスルーの活用

特定のcaseブロックが空の場合、処理はそのまま次のcaseへと引き継がれます。この仕組みを利用すると、複数のcaseで同じ処理をまとめて記述できます。

使用例

<?php
$x=(int)readline("数値を入力してください:");
switch($x){
    case 1:
    case 2: echo "x は 3 未満です"; break;
    case 3: echo "x は 3 と等しいです"; break;
    case 4: echo "x は 3 より大きいです"; break;
    default: echo "x は 1〜4 の範囲外です";
}
?>

実行結果

上記のコードで範囲外の数値を入力すると、次の結果が出力されます。

x は 1〜4 の範囲外です

文字列との比較

switch式で比較する値には、文字列を使用することもできます。

使用例

<?php
$x=readline("何か入力してください:");
switch($x){
    case "India": echo "India と入力しました"; break;
    case "USA": echo "USA と入力しました"; break;
    case "Mumbai": echo "Mumbai と入力しました"; break;
    default: echo "その他の文字列が入力されました";
}
?>

実行結果

リストにない文字列を入力した場合は、次のように表示されます。

その他の文字列が入力されました

まとめ

  • switch文は、同じ変数や式に対して多数の値を比較したい場合に、if文の連続よりもすっきりと書けます。
  • 各caseの最後にはbreakを忘れずに記述し、意図しないフォールスルーを防ぎましょう。
  • どのcaseにも一致しない場合の処理はdefaultで指定します。
  • 空のcaseを組み合わせれば、複数の値に共通する処理を効率よくまとめられます。
  • 比較対象は数値だけでなく文字列も利用可能です。
  1. JavaScriptのswitchステートメント内でreturnを使う方法|サンプルコード付きで解説

    switchステートメント内でreturnステートメントは使えるのか?結論から言うと、switchステートメントが関数の中にある場合は、returnステートメントを含めることができます。returnが実行されると、その時点で関数の処理が終了し、switchステートメントで指定された値が呼び出し元へ返されます。そのため、switchステートメントより後ろに記述したコードは実行されません。さらに、returnは関数自体を抜ける働きを持つため、各caseの末尾にbreakステートメントを記述する必要がない点も見逃せません。breakの書き忘れによる意図しないフォールスルー(次のcaseへの処理の漏れ

  2. C言語のswitch文とは?基本構文・アルゴリズム・サンプルコードでわかりやすく解説

    switch文は、複数の選択肢の中から1つだけを実行したい場合に使われる条件分岐の制御構造です。switch文は、指定した式の値を整数定数や文字定数のリストと順番に照合していき、一致するcaseが見つかった時点で、そのcaseに紐づくステートメント(文)が実行されます。 switch文の基本構文 switch文の基本的な書き方は以下の通りです。 switch (式){    case 値1 : 文1;       break;    case 値2 : 文2;       break; &nbs