【PHP入門】switch/caseの基礎から応用まで解説!

image (4)
書いた人 ヤマシタ
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!エンジニア兼ライターのヤマシタです。

PHPには、条件によってプログラムの処理を分岐するためのSwitch文があります。

この記事では、

・switch文の使い方が知りたい
・swich文で複数条件を指定する方法が知りたい

という基本的な内容から、

・switch文で厳密な比較を行う方法が知りたい
・繰り返し処理の中でswitch文を使用したい
・switch文で比較演算子を使用した分岐処理を行いたい
・swich文で処理のスキップや終了する方法が知りたい

などの応用的な方法に関しても解説していきます。

今回はそんなswitch文の使い方について、わかりやすく解説します!

switch文とは

switch文とは、「もし◯◯だったら、△△の処理をする」といった条件ごとに処理を行うための文法です。

if文は主に条件式によって処理を分岐するのに対して、switch文は、ある変数の値によって分岐処理を行うときに主に使用します。

switch文は同じ変数を異なる値と比較し、値によって異なる処理を行います。

以下の例では、変数の値を値1、値2、値3と比較し、一致する値があればそのcase文の処理を行います。

switch文の書き方:

case文にはcaseの後に記述された値と、比較する値が一致した場合にcase文以下の処理が実行されます。

case文の最後にbreakがあれば、switch文の処理を終了します。

case文での比較には、if文同様に変数で文字列を指定することができますし、「case ‘apple’:」のように文字列や値を直接指定することも可能です。

switch文の基本的な使い方

ここでは、switch文の基本的な使い方を解説します。

以下の例では、$valueの値を0、1、2と比較しています。

$valueの値は1ですので、「case 1:」の後の処理が実行されます。

実行結果:

同じ処理を、以下のようにif文を使って書くこともできます

実行結果:

elseifによる複数分岐が増えると、ソースコードの可読性に難がありますので、複数分岐の場合はswitch文で書いたほうが読みやすくなります。

そのため、elseifとswitch文は用途によって使い分けるのが良いでしょう。

defaultの使い方

switch文で、どの条件にもあてはまらない場合に処理を行うには、default文を使用します。

そのため、if文のelseと同じような使い方になります。

以下の例では、$valueの値を0、1、2と比較し、どの条件にもあてはまらない場合にdefault文の処理が実行されます。

実行結果:

default文は複数指定すると、エラーが発生しますので注意しましょう。

複数条件を指定する方法

case文の中でbreakを使わないことで、複数の条件で同じ処理を行うこともできます。

以下の例では、$valueの値が0、1、2の場合に、「case 2:」の後の処理が実行され、breakでswitch文を終了します。

実行結果:

switch文は基本的にbreakが見つかるまで処理を順番に実行します。

上記のサンプルプログラムのようにcase文で複数の条件で同じ処理を行いたい場合は、switch文の特性を活かすことで複数条件での実行処理が可能となります。

switch文で厳密な比較を行う方法

switch文での比較は‘==’演算子による緩やかな比較で、’===’演算子のように型の比較までは行いません

そのため、以下のように比較する変数とcaseに指定する値の型が異なる場合は注意が必要です。

実行結果:

上の例では、$valueに代入された空の文字列を、0、1、2の数値と比較しています。

ここで’==’演算子による比較が行われるため、空文字列は「0」に暗黙的に変換されてしまい、「case 0:」の処理が実行されてしまいます。

型まで考慮した厳密な比較を行うには、以下のようにします。

実行結果:

switchの後にはtrueを指定し、caseに‘===’演算子による比較を入れます。

このようにすると、「default:」の処理が実行されます。

switch文とif文の違いとは

複数の条件分岐を行う場合はif~else if文でも可能ですが、Switch文との違いは何なのでしょうか?

if文の場合は簡単な条件式を1~2つ書く分には適していますが、「else if」がいくつも連なるとソースコードが見にくくなってしまいます。

Switch文の場合は多分岐の処理でも、if文よりもソースコードがすっきりと見やすくなりますので、多分岐処理に向いていると言えます。

そのため、

「if文は1~2つの分岐処理」

「Switch文は2つ以上の分岐処理」

など使い分けるとよいでしょう。

if文についてさらに詳しく知りたい方は、以下の記事を見てみてくださいね!

breakとcontinue

breakを指定しない場合

switch文を終了するには、case文の中でbreakを使います。

しかし、caseの中でbreakを指定しないとどうなるのでしょうか?

以下にbreakを指定しない場合のSwitch文のサンプルを紹介します。

実行結果:

valueの値は0ですので、「case 0」の条件に一致して「valueは0です」が出力されるまでは良いですが、breakを指定しないと、次のcase文の処理も実行されてしまうことがわかりますね!

そのため、次のcase文も実行させたいなど、特別な理由が無い限りはcase文の処理の最後にbreakを指定するようにしましょう。

breakについては以下の記事でも詳しく解説していますので、ぜひ参考にしてください!

continueでスキップする

switch文をスキップするには、case文の中でcontinueを使います。

switch文でcontinueを使うと、breakと同じ動きをしますが、continueにレベルを指定することで、 ループの内部でswitch文を使用している場合、外側のループの処理を続行させることができます。

以下の例では、switch文の外側でiの値が1から4までループ処理を行っています。

iの値が3の場合、continueでswitch文をスキップします。

continueにはレベル2が指定されているので、switch文の後の処理は実行せず、外側のループ処理が再開されます。

実行結果:

処理を途中でスキップするときに便利ですが、わかりづらいコードにもなりますので使用するには注意が必要です。

continueについては、以下の記事で詳しく解説しています!

switch文の応用的な使い方

ループでswitch文を使用する

複数の値を1つずつswitch文で比較を行いたいときは、配列に値を格納し、配列の要素数分繰り返し処理を行うforeach文の中でswitch文を使うと便利です。

以下にループ処理でswitch文を使用するサンプルを紹介します。

実行結果:

実際のプログラミングでも、このように繰り返し処理の中でswitch文で値を1つずつ比較して処理を行うことはよくあります。

比較演算子を使用する

switch文でもcase文での条件分岐で比較演算子を使用することができます。

比較演算子を使用することでif文と同様に「◯◯以上の場合」、「◯◯以下の場合」のような分岐が可能です。

実行結果:

このようにswitch文でも比較演算子の使用が可能なことがわかりましたね!

switch文でこのような比較演算子を使用した分岐処理はあまり行いませんが、単純な比較で比較条件がたくさんあるときにはswitch文を使用しても良いでしょう。

入れ子でのswitch文

Switch文はcase文の後に、更に入れ子でSwitch文での分岐処理を記述することが可能です。

以下にcase文での実行処理で、更にSwitch文で多分岐を行う場合のサンプルを紹介します。

実行結果:

このようにSwitch文での入れ子処理が可能なことがわかりますね!

しかし、階層が深くなりすぎるとソースコードの可読性が落ちてしまいますので、注意しましょう。

まとめ

今回は、switch文の使い方について、

  • switch文とは
  • switch文の基本的な使い方
  • switch文の応用的な使い方
  • continueとbreakの使い方

などについて解説しました。

複数分岐を書くのに便利なswitch文ですが、型の比較まで行われない点や、defaultとcontinueの使い方には注意してください。

switch文の使い方について忘れてしまったら、この記事を思い出して下さい!


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


自分にプログラミングなんて・・・と思っていませんか?

今後10年間で今ある職業の『77%』はなくなると言われています。

人工知能や機械学習を筆頭にVR、AR、ドローンなどの最先端技術の発達はこれからのあなたの働き方に間違いなく影響を与えるでしょう。

将来を見据えてプログラミングができるようになってエンジニアになりたい、自分だけにしかできないクリエイティブな仕事がしたい、、、とお考えの方も少なくないでしょう。

と、同時に「難しそう、、自分にはできないだろう、、、」と諦めている方も多いのではないでしょうか。

弊社マンツーマンレッスンは、お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、オリジナルアプリ開発や、フリーランスとしての仕事獲得まで支援しています。

まずは『無料体験レッスン』で弊社コンサルタントと一緒にあなた専用の学習カリキュラムを考えてみてはいかがでしょうか?

詳しくは下の画像をクリックしてください。

cta_mtm2

学習者インタビュー

人気講師インタビュー

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

ヤマシタ

フリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、今まで200本以上の執筆経験があります