PHPでFizzBuzz問題を解いてみた。

PHPでFizzBuzz問題を解いてみた。

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

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

d.hatena.ne.jp

 

①if, else文で書くと、こんな感じ

<?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;
  }
}

単純にif, elseif, elseで書きました。

最もシンプルで分かりやすい書き方かと思います。

こんな感じでもOK

なお、if文は次のように書いても動きます。

<?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
$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" : "";
}

if,elseif,elseのバターンのときと違って、かなりトリッキーに見えます。

三項演算子を使うと短く書けますが、場合によっては分かりづらいコードになりかねませんので、使うときは自己責任でお願いします。

今回はswitch文を使いました。

switch文を使うと、こんな感じ

<?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;
  }
}

解説

「15で割って余りがゼロ」ということでFizzBuzzを出力します。

「15で割って余りが3の倍数」ということは3で割り切れる数字なのでFizzを出力します。

「15で割って余りが5の倍数」ということは5で割り切れる数字なのでBuzzを出力します。

さて、今度はトリッキーな感じになります。array_mapを使ってみます。

array_mapを使うと、こんな感じ

<?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);

解説

array_map()は関数を使って配列を置き換える関数です。

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

Related Post

シェアする

  • このエントリーをはてなブックマークに追加

フォローする