switch
 (PHP 4, PHP 5, PHP 7, PHP 8)
 
  switch文は、同じ式を用いてIF文を並べたのに似ています。
  同じ変数を異なる値と比較し、値に応じて異なったコードを実行したいと
  思うことがしばしばあるかと思います。
  switch文は、まさにこのためにあるのです。
 
 注意: 
  
   他の言語とは違って、
   continue命令は
   switch にも適用され、breakと同じ動作をします。
   ループの内部で switch を使用しており、
   外側のループの処理を続行させたい場合には、continue 2
   を使用してください。
  
 
 注意: 
  
   switch/case が行うのは、
   緩やかな比較
   であることに注意しましょう。
  
 
 
  次の二つの例は、同じことを二つの異なった方法で書いたものです。
  一つは、if と elseif文を、
  もう一つはswitch文を使っています。
  どちらも、出力は同じです。
  
   例1 switch 文の構造
   
<?php
// これが switch 文です:
switch ($i) {
    case 0:
        echo "iは0に等しい";
        break;
    case 1:
        echo "iは1に等しい";
        break;
    case 2:
        echo "iは2に等しい";
        break;
}
// 上記は、下記と同じです:
if ($i == 0) {
    echo "iは0に等しい";
} elseif ($i == 1) {
    echo "iは1に等しい";
} elseif ($i == 2) {
    echo "iは2に等しい";
}
?>
    
   
 
 
  失敗を避けるためにswitch文がどのように実行されるのかを
  理解することが重要です。
  switch文は、行毎に実行されます。
  (実際には、文毎に実行されます。)初めは、何も実行しません。
  switch式の値と同じ値として評価される式を有する
  case文が見つけられたときに初めてPHPにより
  命令の実行が行われます。
  PHPはswitchブロックの終わりまたは最初の
  break文まで実行を続けます。
  CASE文の終わりにbreak文を書かない場合は、PHPは
  次のCASE文を実行しつづけます。例えば、
  
 
 
  ここで、$iが0に等しい場合は、PHPは全ての echo
  文を出力してしまいます!
  $iが1の場合、PHPは最後の二つの echo 文を出力します。
  $iが2に等しい場合のみ、'期待した'動作をし、
  'iは2に等しい'と表示します。
  このため (ある種の状況下では、BREAKを付加することを避けたいと
  思うかもしれませんが)、
  break文を忘れないようにすることが重要です。
 
 
  switch文では、条件は1度だけ評価され、
  その結果が各case文と比較されます。
  elseif文では、条件は、再度評価されます。
  使用する条件が単純な比較処理よりも複雑な処理を行ったり、
  重い繰り返し処理を行う場合、switchの方が
  より処理が速い可能性があります。
 
 
  caseに付随する文は、空とすることが可能です。
  この場合、次のcaseに付随する文に制御が移行します。
  
 
 
  default は、case 文の特別な場合です。これは他の全ての case
  にマッチしない場合に実行されます。例を以下に示します。
  
  注意: 
   
    複数の default を置くと、
    E_COMPILE_ERROR エラーが発生します。
   
  
  注意: 
   
    技術的には、
    default は switch 文の中のどの位置でも置くことができます。
    default は他の case にマッチしなかった場合に使われるものです。
    しかし、規約上は最後に置くのが一番です。
   
  
 
 
  どの case にもマッチせず、
  default も存在しない場合、
  どのコードも実行されません。これは、
  どの if 文も true でなかった場合と同じです。
 
 
  case に与える値は、式であっても構いません。
  しかし、式はそれ自体が実行され、
  その結果が switch に与えた値と緩やかに比較されます。
  これは、switch に与える値の複雑な評価には使えないということです。
  たとえば、以下の例を見てみましょう:
  
 
 
  もっと複雑な比較を行うには、
  true をswitch文の値として指定するやり方が使えます。
  もしくは、switch文ではなく、
  if-elseブロックが使えます。
  
 
 
  switch文の制御構造に関する別の構文がサポートされています。
  詳細は、
  制御構造に関する別の構文を参照ください。
  
 
 
  case の最後はコロンではなくセミコロンとすることもできます。たとえば次のようになります。