switch文使った条件分岐の方法

PHP で用意されている switch 文を使用すると、ある値を複数の値と順に比較し、一致した場合に対応する処理を実行することができます。主に同じ変数や式の値によって処理を分けたい場合に使用されます。ここでは PHP で switch 文を使用する方法について解説します。

switch文の使い方

変数や式の値を複数の候補と順に比較して処理を分岐したい場合に使用するのが switch 文です。書式は次の通りです。

switch (式){
case 値1:
  式が値1と等しい時の処理;
  ・・・
  break;
case 値2:
  式が値2と等しい時の処理;
  ・・・
  break;
case 値3:
  式が値3と等しい時の処理;
  ・・・
  break;
default:
  式がいずれの値にも等しくない時の処理;
}

式の部分には任意の式を記述でき、変数を指定することもできます。比較する値の数だけ case を記述します。式の値がいずれかの case の値と一致した場合、その case の位置から処理が実行されます。

なお、 switch 文では case の後に break を書かない場合、一致した位置から下に向かって順に処理が実行されます(フォールスルーと呼ばれる仕組みで switch 文の特徴でもあります)。そのため通常は処理の終わりに break を記述します。

いずれの値とも一致しない場合に実行したい処理がある場合は default を使用してください。必要ない場合は default の部分は省略できます。

実際には次のように記述します。

$pref = "神奈川県";

switch ($pref){
case "東京都":
  echo "関東地方です";
  break;
case "大阪府":
  echo "関西地方です";
  break;
case "神奈川県":
  echo "関東地方です";
  break;
default:
  echo "その他の地域です";
}

なお switch 文は if 文を使っても記述することができます。

$pref = "神奈川県";

if ($pref == "東京都"){
  echo "関東地方です";
}elseif ($pref == "大阪府"){
  echo "関東地方です";
}elseif ($pref == "神奈川"){
  echo "関東地方です";
}else{
  echo "その他の地域です";
}

どちらを使用しても問題はないですが、同じ値を複数の値と順に一致するかどうか調べたい場合には switch 文の方が目的がはっきりと分かります。

複数の値に一致した場合に同じ処理を行う

switch 文では、 case のあとに記述された値と式の値を順に比較し、一致した場合はその位置から処理が実行されます。複数の値に対して同じ処理を行いたい場合は、次のように記述します。

switch (式){
case 値1:
  式が値1と等しい時の処理;
  ・・・
  break;
case 値2:
case 値3:
case 値4:
  式が値2または値3または値4と等しい時の処理;
  ・・・
  break;
default:
  式がいずれの値にも等しくない時の処理;
}

この場合、式の値が値2、値3、値4のいずれかと一致すると、同じ処理が実行されます。

switch 文では、 case の値と一致した位置から break に出会うまで下へ向かって順に処理が実行されます(フォールスルー)。この例では値2や値3に対応する処理や break が記述されていないため、そのまま処理が進み、値4の処理が実行されます。その結果、値2、値3、値4のいずれに一致した場合でも同じ処理が実行されます。

もし値2と一致したときだけは、別の処理を実行し、そのあとで値3や値4と同じ処理を実行させたいのであれば次のように記述することができます。

switch (式){
case 値1:
  処理1
  break;
case 値2:
  処理2
case 値3:
case 値4:
  処理3
  break;
default:
  処理4
}

値2と一致すると、まず「処理2」が実行されて、その後で「処理3」が実行されます。値3や値4と一致したときは「処理3だ」けが実行されます。

実際には次のように記述します。

$pref = "神奈川県";

switch ($pref){
case "東京都":
case "神奈川県":
  echo "関東地方です";
  break;
case "大阪府":
case "京都府":
  echo "関西地方です";
  break;
default:
  echo "その他の地域です";
}

変数の値が "東京都" か "神奈川県" の場合、同じ処理を実行します。また "大阪府" か "京都府" の場合も同じ処理を実行します。

なお、 switch 文でよくあるミスとして、 break を書き忘れたために本来実行する予定のなかった処理まで実行されてしまうことがあります。 break を書き忘れたのか、それとも意図的にフォールスルーを利用しているのかは、コメントなどで明示されていない限り判断が難しいため注意が必要です。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$pref = "神奈川県";

echo $pref, "は";
switch ($pref){
case "東京都":
case "神奈川県":
case "千葉県":
  echo "関東地方です\n";
  break;
case "愛知県":
  echo "東海地方です\n";
  break;
case "大阪府":
case "京都府":
  echo "関西地方です\n";
  break;
default:
  echo "その他の地域です\n";
}

$pref = "愛知県";

echo $pref, "は";
switch ($pref){
case "東京都":
case "神奈川県":
case "千葉県":
  echo "関東地方です";
  break;
case "愛知県":
  echo "東海地方です";
  break;
case "大阪府":
case "京都府":
  echo "関西地方です";
  break;
default:
  echo "その他の地域です";
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

switch文

変数の値に応じて、対応する出力を行いました。

-- --

PHP で switch 文を使用する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。