PHP switch文 条件で処理を分ける

目次

switch文とは

switch(条件){
  case 値 :
    処理
    break;
   ・・・
  default:
    処理
    break;
}
  • 条件の値とcaseの値が一致すれば、配下の処理が実行されます。
  • breakでswitch文を抜けます。breakがないと下の判定(case/default)に行ってしまいます。
  • defaultは、条件の値がどのcaseの値にも一致しない時に実行されます。省略可能ですが書いたほうが良いです。

switch文 (複数の条件で処理を分ける)

<?php
$num1 = "2";

switch ($num1) {
	case "1":
		print "A";
		break;
	case "2":
		print "B"; //Bが出力される
		break;
	default:
		print "C";
}

8行目のcase "2"は変数の値と一致するのでその配下の処理が実行されます。
9行目の処理が実行されます。
10行目のbreakでswitch文を抜けます。

caseの後に条件を追加

<?php
$a = 8;

switch($a){
	case $a < 5:
		print("A");
		break;
	case $a < 10:
		print("B");// Bが出力される
		break;
	default:
		print "C";
}

5,8行目はcaseの後で比較(<)を行っています。

switch文の中でif文を使用

<?php
$a = 3;

switch($a){
	case 3:
		if ($a % 2 == 0) {
			print("A");
		} else {
			print("B"); // Bが出力される
		}
		break;
	default:
		print "その他";
}

6行目はswitch文の中のcaseの後にif文を使用しています。
%は、割り算の余りを求めます。

breakがない場合(フォールスルー)

<?php
$a = "1";

switch($a){
	case "1":
		print "A"; // Aが出力される

	case "2":
		print "B"; //Bが出力される
		break;
	default:
		print "C";
}

7行目は、breakがありません。
5行目のcase "1"の処理の後、8行目のcase"2"の処理も実行されます。
フォールスルー(fall through/落ちる)と呼ばれます。
breakを書き忘れたのかわかりづらいので使用しないほうが良いです。

HTMLにswitch文を書く時

<?php $num = 2; ?>

<?php switch ($num):
	case "1": ?>
		<p>A</p>
		<?php break; ?>
	<?php
	case "2": ?>
		<p>B</p><!-- Bが出力される -->
		<?php break; ?>
	<?php
	default: ?>
		<p>C</p>
<?php endswitch; ?>

3~14行目がswitch文です。
3行目のswitchの後ろには、コロン:がついています。
14行目は、endswitchがあります。switch文の終わりがわかりやすくなっています。
実行すると9行目が表示されます。5,13行目は表示されません。

関連の記事

PHP if文 条件で処理を分ける
PHP while文とdo…while文 処理を繰り返す (break/continue)

△上に戻る