金とダイエットと色々ブログ

FX、競馬、ダイエット、会社経営。色々やってます

PHPのif, else, elseif, switchの条件分岐構文のまとめ! FizzBuzz問題を解いてみよう

PHPのif, else, elseifの条件分岐構文をまとめました。

使い方はソースを読むのが一番早いのでサンプルを用意しました。

例としてプログラミングで有名なFizzBuzz問題を解いてみました。

FizzBuzz問題って何?という方は↓

d.hatena.ne.jp

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]
<?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]

次は三項演算子を使ったバージョンです。

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()は関数を使って配列を置き換える関数です。

幅が広がるのでぜひともマスターしてくださいね!