PHPでウェブの世界と繋がろう!
menu
ホーム > PHPの文法 > 6 制御文 > 6-5 switch 文

6-5 switch 文

Pocket

- 1 分ノート ! -

  • switch文はある条件式の値によって幾つかの処理の中から特定の処理を実行する
    switch(条件式){
    	case 式 :
    	文
    	break;
    
    	case 式 :
    	文
    	break;
    
    	・・・
    	・・
    
    	default:
    	文
    	break;
    }
    
  • 「switch(条件式)」は、「case 式」で比較する元の値を出力する式
  • 「{ }(ブロック)」内は、switch文を記述する
  • 「case 式 : 文」の 式 は、「switch(条件式)」で比較する値を出力する式
  • 「case 式 : 文」の 文 は、「switch(条件式)」と「case 式」の値が一致したときに実行する文
  • case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
  • キーワード「break」は、処理の終了を宣言するキーワード
    breakがないと以降の「case文」が実行される
  • キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
  • switch文の比較は「==」と同じ動作
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード

switch文とは
POINT
  • switch文はある条件式の値によって幾つかの処理の中から特定の処理を実行する
    switch(条件式){
    	case 式 :
    	文
    	break;
    
    	case 式 :
    	文
    	break;
    
    	・・・
    	・・
    
    	default:
    	文
    	break;
    }
    
  • 「switch(条件式)」は、「case 式」で比較する元の値を出力する式
  • 「{ }(ブロック)」内は、switch文を記述する
  • 「case 式 : 文」の 式 は、「switch(条件式)」で比較する値を出力する式
  • 「case 式 : 文」の 文 は、「switch(条件式)」と「case 式」の値が一致したときに実行する文
  • case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
  • キーワード「break」は、処理の終了を宣言するキーワード
    breakがないと以降の「case文」が実行される
  • キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
  • switch文の比較は「==」と同じ動作
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード

switch文は、ある同じ式「 switch(条件式) 」を用いて、結果の値他の式の値「case 式」比較し、一致した場合に処理を実行します。つまり、ある条件式の値によって幾つかの処理の中から特定の処理を実行する場合に使用します。

$i = 2;
switch($i){
	case 1 :
	echo '$iの値は1です。';
	break;

	case 2 :
	echo '$iの値は2です。';
	break;

	case 3 :
	echo '$iの値は3です。';
	break;
}

結果は

$iの値は2です。

となります。

switch文はif文を並べたもの「 if(式)文 if(式)文 if(式)文 」や、「 if文+elseif(文) 」を組み合わせたもの「 if(式)文 elseif(式)文 elseif(式)文 」に似ています
if文やelseif文を並べたものは条件式を毎回評価しますが、switchの条件式は1回のみ評価されます。

上記の例をif文+elseif文で表現すると以下になります。上記のswitch文と同じことを意味します。

$i = 2;
if($i == 1)
	echo '$iの値は1です。';
elseif($i == 2)
	echo '$iの値は2です。';
elseif($i == 3)
	echo '$iの値は3です。';

結果は

$iの値は2です。

となります。
※elseif文の場合、式は毎回評価されます。

switch文は「switch(条件式)」で指定された式の値を評価して、「case 式 :」の値と比較します。「switch(条件式)」の値と一致する「case 式」の値があった場合は、それ以降のコードキーワード「break」まで実行します。一致する値がなかった場合、キーワード「default」が指定されていれば、それ以降のコードを実行します。キーワード「default」以降のコードも「break」に達した時点で処理を終了します。

注意しなければならないことはキーワード「break」を記述しないと、値が一致した場合に、以降のcase文をすべて実行してしまうことです。下記の「switch文の挙動」で確認下さい。

switch文の比較「 switch(条件式)とcase式の値の比較 」は「==」で比較するのと同じ動作の「緩やかな比較」です。「===」はデータ型の比較も行いますが、「==」は型の比較はされません。

switch文の挙動
POINT
  • switch(条件式)の評価は1回のみ
  • キーワード「break」は、処理の終了を宣言するキーワード
    breakがないと以降の「case文」が実行される
  • case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
  • キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
  • switch文の比較は「==」と同じ動作

 switch文は行毎(文毎)に実行されます。最初の時点では何も実行しません。「switch(条件式)」を評価した結果の値と「case式」を評価した結果の値を比較して、一致する値が見つけられたときに初めて処理が実行されます。PHPはswitchブロックの終わり「switch(条件式){ }」か、または、最初のキーワード「break」まで実行を続けます。「case文」の終わりにキーワード「break」を配置しない場合は、次の「case文」の実行を続けます。

switch(条件式)の評価は1回のみ
 switch(条件式)の評価は1回のみですが、elseif文では条件式は毎回評価されます。
キーワード「break」がない場合
$a = 1;
switch($a){
	case 1 :
	echo '$aの値は1です。';

	case 2 :
	echo '$aの値は2です。';

	case 3 :
	echo '$aの値は3です。';

	case 4 :
	echo '$aの値は4です。';

	case 5 :
	echo '$aの値は5です。';

	default:
	echo '$aの値は6です。';
}

結果は

$aの値は1です。$aの値は2です。$aの値は3です。$aの値は4です。$aの値は5です。$aの値は6です。

となります。

キーワード「break」が記述されている場合は、

$a = 1;
switch($a){
	case 1 :
	echo '$aの値は1です。';
	break;

	case 2 :
	echo '$aの値は2です。';

	case 3 :
	echo '$aの値は3です。';

	case 4 :
	echo '$aの値は4です。';

	case 5 :
	echo '$aの値は5です。';

	default:
	echo '$aの値は6です。';
}

結果は

$aの値は1です。

となります。

キーワードbreakは重要です。

case式 値のデータ型
 case式で得る値のデータ型は、「整数」、「浮動小数点」、「文字列」とすることができます。 配列又はオブジェクトは、単純な型にキャストされていない限り使用することができません。

キャストとは型変換のことです。PHPにはキャスト演算子が用意されています。詳細はこちらを参照下さい。

switch文で文字列を使用

$sName = 'Sato';
switch($sName){
	case 'Yamada' :
	echo '名前はYamadaです。';
	break;

	case 'Suzuki' :
	echo '名前はSuzukiです。';
	break;

	case 'Sato' :
	echo '名前はSatoです。';
	break;
}

結果は

名前はSatoです。

となります。

キーワード「default」
 「switch(条件式)」の値が全ての 「case 式」の値に一致しない場合にdefault文が実行されます。

$a = 10;
switch($a){
	case 1 :
	echo '$aの値は1です。';
	break;

	case 2 :
	echo '$aの値は2です。';
	break;

	default :
	echo '値が一致しませんでした。';
	break;
}

結果は

値が一致しませんでした。

となります。

switch文の比較は「==」と同じ動作
 switch文の比較「 switch(条件式)とcase式の値の比較 」は「==」で比較するのと同じ動作の「緩やかな比較」です。「===」はデータ型の比較も行いますが、「==」は型の比較はされません。

以下の例では整数型と文字列型の数字を比較しています。

$a = 20;
switch($a){
	case '10' :
	echo '$aの値は10です。';
	break;

	case '20' :
	echo '$aの値は20です。';
	break;

	default :
	echo '値が一致しませんでした。';
	break;
}

結果は

$aの値は20です。

となります。

「変数a」は整数型で、case式の値は「'(シングルクォート)」で囲い文字列型として扱っていますが、値は一致します。

サンプルコード

– サンプル Click Here ! –

<h3>条件式は変数で値は文字列</h3>
<?php
$sName = 'Sato';
switch($sName){
	case 'Yamada' :
	echo '名前はYamadaです。';
	break;

	case 'Suzuki' :
	echo '名前はSuzukiです。';
	break;

	case 'Sato' :
	echo '名前はSatoです。';
	break;
}
?>

<h3>条件式は変数で値は整数値</h3>
<?php
$i = 5;
switch($i){
	case 1 :
	echo '値は1です。';
	break;

	case 2 :
	echo '値は2です。';
	break;

	case 3 :
	echo '値は3です。';
	break;

	case 4 :
	echo '値は4です。';
	break;

	case 5 :
	echo '値は5です。';
	break;
}
?>

<h3>条件式は演算子を利用した式 値は整数値</h3>
<?php
$a = 10;
$b = 2;
switch($a * $b){
	case 10 :
	echo '値は10です。';
	break;

	case 20 :
	echo '値は20です。';
	break;

	case 30 :
	echo '値は30です。';
	break;

	case 40 :
	echo '値は40です。';
	break;

	case 50 :
	echo '値は50です。';
	break;
}
?>

<h3>条件式は演算子を利用した式 値は整数値 文は複数行実行</h3>
<?php
$a = 10;
$b = 2;
switch($a * $b){
	case 10 :
	echo '値は10です。';
	echo '値は10です。';
	echo '値は10です。';
	break;

	case 20 :
	echo '値は20です。';
	echo '値は20です。';
	echo '値は20です。';
	break;

	case 30 :
	echo '値は30です。';
	echo '値は30です。';
	echo '値は30です。';
	break;

	case 40 :
	echo '値は40です。';
	echo '値は40です。';
	echo '値は40です。';
	break;

	case 50 :
	echo '値は50です。';
	echo '値は50です。';
	echo '値は50です。';
	break;
}
?>

<h3>switch文のキーワードdefault文を実行</h3>
<?php
$a = 8;
switch($a){
	case 1 :
	echo '値は1です。';
	break;

	case 2 :
	echo '値は2です。';
	break;

	case 3 :
	echo '値は3です。';
	break;

	case 4 :
	echo '値は4です。';
	break;

	case 5 :
	echo '値は5です。';
	break;

	default:
	echo '一致する値はありません。';
	break;
}
?>
実行結果
式は変数で値は文字列
名前はSatoです。

条件式は変数で値は整数値
値は5です。

条件式は演算子を利用した式 値は整数値
値は20です。

条件式は演算子を利用した式 値は整数値 文は複数行実行
値は20です。値は20です。値は20です。

switch文のキーワードdefault文を実行
一致する値はありません。

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

投稿日:2011年11月6日
最終更新日:2014年02月20日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpref-structures_switch/trackback/