PHPのif, else, elseif, switchの条件分岐構文のまとめ! FizzBuzz問題を解いてみよう
PHPのif, else, elseifの条件分岐構文をまとめました。
使い方はソースを読むのが一番早いのでサンプルを用意しました。
例としてプログラミングで有名なFizzBuzz問題を解いてみました。
※FizzBuzz問題って何?という方は↓
PHPのif, else, elseifの条件分岐構文
PHPのif, else, elseif文で書いたFizzBuzz
[php] <?php $startNum = 1; $endNum = 100; for ($i = $startNum; $i < $endNum; $i++) { if ($i % 15 == 0) { echo "Fizz Buzz"; } elseif ($i % 5 == 0) { echo "Buzz"; } elseif ($i % 3 == 0) { echo "Fizz"; } else { echo $i; } } [/php]
単純にif, elseif, elseで書きました。
最もシンプルで分かりやすい書き方かと思います。
こんな感じでもOK
なお、if文は次のように書いても動きます。
[php] &amp;lt;?php $startNum = 1; $endNum = 100; for ($i = $startNum; $i &amp;lt; $endNum; $i++) { if ($i % 15 == 0) echo "Fizz Buzz"; elseif ($i % 5 == 0) echo "Buzz"; elseif ($i % 3 == 0) echo "Fizz"; else echo $i; } [/php]
次は三項演算子を使ったバージョンです。
PHPの三項演算子で書いたFizzBuzz
[php] <?php $start = 1; $end = 100; for ($i = $start; $i < $end; $i++) { $fizz = ($i % 3 == 0); $buzz = ($i % 5 == 0); echo !($fizz or $buzz) ? $i : ""; echo ($fizz) ? "Fizz" : ""; echo ($buzz) ? "Buzz" : ""; } [/php]
if,elseif,elseのバターンのときと違って、かなりトリッキーに見えます。
三項演算子を使うと短く書けますが、場合によっては分かりづらいコードになりかねませんので、使うときは自己責任でお願いします。
今回はswitch文を使いました。
PHPのswitch文で書いたFizzBuzz
[php] <?php $start = 1; $end = 100; for ($i = $start; $i < $end; $i++) { switch ($i % 15) { case 0: echo "FizzBuzz"; break; case 3: case 6: case 9: case 12; echo "Fizz"; break; case 5: case 10: echo "Buzz"; break; default: echo $i; } } [/php]
解説
「15で割って余りがゼロ」ということでFizzBuzzを出力します。
「15で割って余りが3の倍数」ということは3で割り切れる数字なのでFizzを出力します。
「15で割って余りが5の倍数」ということは5で割り切れる数字なのでBuzzを出力します。
さて、今度はトリッキーな感じになります。array_mapを使ってみます。
おまけ array_mapを使ったFizzBuzz
[php] <?php $arr = range(1, 100); $filter = function($value){ if ($value % 3 == 0 && $value % 5 == 0){ return "FizzBuzz"; } elseif ($value % 3 == 0){ return "Fizz"; } elseif ($value % 5 == 0){ return "Buzz"; }else{ return $value; } }; echo implode(array_map($filter,$arr), PHP_EOL); [/php]
解説
array_map()は関数を使って配列を置き換える関数です。
幅が広がるのでぜひともマスターしてくださいね!