質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.93%

phpでのFizzBuzz問題。1〜100数字を縦に表示したい

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,847

イメージ説明### 前提・実現したいこと
PHPでFizzBuzz問題を解いています。
1〜100までの数字の間で
3の倍数の時”Fizz”、5の倍数の時”Buzz”、3でも5でもある(15)倍数の時に”FizzBuzz”とechoする問題です。
3の倍数の時、5の倍数の時、3でも5でもある(15)倍数の時に改行するようには設定できたのですが、
添付した写真のように表示されます。

希望としては下記のように


3Fizz

5Buzz


〜省略〜
15FizzBuzz

と縦に表示したいです。
検索の仕方が悪いのか2日くらい悩んでします。
よろしくお願いいたします。
(限定された範囲の連続した数字を縦に表示し、その連続した数字の中から条件に該当した数字に文字列をechoする方法)

プログラミングの勉強を本気に始めて2日くらいです。
検索方法も教えていただけると嬉しいです。
また、もっとスマートな書き方があるよ、という方は説明付きで教えていただけると嬉しいです。

少し前まで、「パソコンの環境設定は?」と聞かれて「26℃くらい、いやもう少し低いです。」と答えていたくらいのパソコンの知識しかありません。これから勉強していきますのでよろしくおねがいします。

-−追記-−
皆様、ご指摘・ご教授ありがとうございます。
現在自分が持っている知識・イメージを集めてなんとか形にすることができました。
変更点としてはすべての思い当たる分岐に改行<br/>を入れました。
以下、コードです。

<?php

   for ( $i = 1 ; $i <= 100 ; $i++){
    if      (!($i % 15)){
                   echo $i ;
                   echo "Fizz Buzz<br/>" ;
      }elseif
            (!($i % 5)){
                   echo $i ;
                   echo "Buzz<br/>" ;
      }elseif
            (!($i % 3)){
                   echo $i ;
                   echo "Fizz<br/>" ;
      }elseif
            ($i % 15){
                   echo $i."<br/>" ;
      }elseif
            ($i % 5){
                   echo $i."<br/>" ;
      }elseif
            ($i % 3){
                   echo $i."<br/>" ;
      }
  }

?>

もっとスマートな記述方法を探してみます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dokukinoko-0815

    2019/07/02 13:51

    mts10806様

    ありがとうございます。
    すみません。
    テキストベースですね。
    今回初投稿でした。勉強します。

    <br/>は文字列の改行で” ”内に入れられるものと理解しています。

    キャンセル

  • m.ts10806

    2019/07/02 14:15

    質問は編集できますので適宜ご対応ください。

    キャンセル

  • dokukinoko-0815

    2019/07/02 16:12

    mts10806様

    承知いたしました。
    ありがとうございます。

    キャンセル

回答 5

+4

  • 3の倍数でも5の倍数でもない時にどの行のechoが実行されるのか
  • どうしたら改行されるのか

敢えて抽象的にしますが、改行については上記2つが分かれば自ずと分かると思います。


PHPならばまず公式ページを見ましょう。
PHP: PHP マニュアル - Manual

検索しても出ない場合、検索ワードを変えてみましょう。
(まぁ今回は「php echo 改行」以外にどうしようもない気がしますが。「php 縦表示」とかにしていたら出ないでしょうね)

それでも分からない時は「プログラムは思い通りには動かない。書いてある通りに動く」の鉄則を胸に、動作しているであろう順番でコードを追いかけ、そこで何をしているか説明してみてください。

その為にも、改行やインデント(行頭の隙間空け)などはきちんと揃えましょう。
スマートな書き方(スクリプトの組み立て方)以前の問題です。変数の命名についても宜しくないです。
「リーダブルコード」などで検索してみてください。

また、質問の際は質問するときのヒント|teratail(テラテイル)を参考に、読みやすい表記をお願いします。
(特にコードを画像にされると再現チェックが困難です)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/02 13:59

    sakura_hana様

    ありがとうございます。
    もう一度マニュアルを見直して勉強します。
    リーダブルコードは初めて聞きました。
    質問の仕方も勉強不足でした。
    申し訳ございません。

    キャンセル

+3

1や2を表示したあと改行を表示すればいいです

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/02 13:54

    y_waiwai様

    ありがとうございます。
    なるほどです。
    その方法をどうにか考えてみます。

    キャンセル

+2

php の出力内容は、ブラウザに表示された内容の「ソース」です。
ブラウザでソースを確認すると、何が出力として足りないか確認できます。

php は、Web サーバを通じて、ブラウザに出力されるケースが多いので html の学習も並行して進めるとはかどります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/02 16:11

    te2ji様
    ありがとうございます。
    html、CSS、JavaScript、PHP、Laravel、Linuxと勉強することが多く頭が混乱していますが頑張ります。

    キャンセル

  • 2019/07/02 16:21

    横から失礼します。
    LaravelとLinuxはまだ全然先でいいと思います。
    特にLaravelはPHPでオブジェクト指向をきちんとおさえてようやくある程度理解できるものですし、
    teratailに投稿される質問を見ているとオブジェクト指向全然できていない状態で入ってずっと進まない人を良く見ます。
    PHPマニュアルを適切に使えるようになって、ドキュメントを読んで、フレームワークのコードも読んで仕様把握できるくらいになってからが理想です。

    キャンセル

  • 2019/07/02 16:24

    php の学習には
    https://paiza.io/ja/projects/new
    みたいなサイトも便利です。

    DB や POST/GET を使用しないコードであれば簡単に試すことができます。

    キャンセル

+1

検索方法も教えていただけると嬉しいです。

一通りの知識が無い状態で、検索してもしょうがないです。
入門書を最後まで読んでいない状態の場合は、入門書から説明を探しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/02 17:00

    otn様

    ありがとうございます。
    あと、10回以上読み直します。

    キャンセル

check解決した方法

0

解決しました。
以下コードです!

<?php

   for ( $i = 1 ; $i <= 100 ; $i++){
    if      (!($i % 15)){
                   echo $i ;
                   echo "Fizz Buzz<br/>" ;
      }elseif
            (!($i % 5)){
                   echo $i ;
                   echo "Buzz<br/>" ;
      }elseif
            (!($i % 3)){
                   echo $i ;
                   echo "Fizz<br/>" ;
      }elseif
            ($i % 15){
                   echo $i."<br/>" ;
      }elseif
            ($i % 5){
                   echo $i."<br/>" ;
      }elseif
            ($i % 3){
                   echo $i."<br/>" ;
      }
  }

?>

思い当たる分岐に改行タグ<br/>を入れました。
写真はlocalhostサーバーでの表示の一部です。
localhpstサーバーでの表示

ご教授ただいた皆様ありがとうございました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/03 21:10

    akura_hana様

    丁寧に説明ありがとうございます。
    数学。。。。成績が壊滅だったことを思い出しましたが、
    なるほどです。ようやくコードの理解できて不自由なく読めるようになりました。
    3日間、悩んでいました。
    これで、安心して眠れます。

    キャンセル

  • 2019/07/04 05:29

    dokukinoko-0815さん
    「一行」は冗談ですよ。コード自体にインデントも改行もつけないコードにすることです。
    <?php $hoge=true;if($hoge){echo't';}else{echo'f';} ?>
    終端の;とそれぞれの機能が判別可能であれば動くので(もちろん読みにくいのでやめましょう。サーバーサイドの言語に難読化はほとんど意味ありません)
    なるべく参考にしたサイトはブックマークしておくなりして残しておいたほうが良いです。あとから参照することもあるでしょうし、しばらくして見たときに自身の成長をはかる指標にもなります。
    Qiitaの記事とかいまだにお世話になりますね。

    sakura_hanaさん
    null合体演算子は7以降に導入されたもので私も別の回答者から教えてもらいました。知らないとまさに??となりますがかなり有用と思います(でも三項演算子と同じく使いすぎはよくないかもしれません)

    キャンセル

  • 2019/07/04 20:02

    mts様

    なるほど、こんな書き方もあるのですね。
    面白いです。
    難読化しないように気をつけます。

    ブックマークについては気になったサイトはしているのですが、自分の探している答えじゃないときはスルーしていました。できるだけブックマークする癖をつけます。
    null合体演算子の方も気になってきましたので調べてみます。
    ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る