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

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

新規登録して質問してみよう
ただいま回答率
85.50%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

2494閲覧

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

dokukinoko-0815

総合スコア14

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/02 04:26

編集2019/07/02 07:05

イメージ説明### 前提・実現したいこと
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

1<?php 2 3 for ( $i = 1 ; $i <= 100 ; $i++){ 4 if (!($i % 15)){ 5 echo $i ; 6 echo "Fizz Buzz<br/>" ; 7 }elseif 8 (!($i % 5)){ 9 echo $i ; 10 echo "Buzz<br/>" ; 11 }elseif 12 (!($i % 3)){ 13 echo $i ; 14 echo "Fizz<br/>" ; 15 }elseif 16 ($i % 15){ 17 echo $i."<br/>" ; 18 }elseif 19 ($i % 5){ 20 echo $i."<br/>" ; 21 }elseif 22 ($i % 3){ 23 echo $i."<br/>" ; 24 } 25 } 26 27?> 28

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/02 04:44

えっと、<br />が何のことかとかは分かりますか?
dokukinoko-0815

2019/07/02 04:51

mts10806様 ありがとうございます。 すみません。 テキストベースですね。 今回初投稿でした。勉強します。 <br/>は文字列の改行で” ”内に入れられるものと理解しています。
m.ts10806

2019/07/02 05:15

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

2019/07/02 07:12

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

回答5

0

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

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


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

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

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

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

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

投稿2019/07/02 04:49

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokukinoko-0815

2019/07/02 04:59

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

0

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

投稿2019/07/02 04:40

編集2019/07/02 04:42
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokukinoko-0815

2019/07/02 04:54

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

0

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

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

投稿2019/07/02 06:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokukinoko-0815

2019/07/02 07:11

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

2019/07/02 07:21

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

退会済みユーザー

2019/07/02 07:24

php の学習には https://paiza.io/ja/projects/new みたいなサイトも便利です。 DB や POST/GET を使用しないコードであれば簡単に試すことができます。
guest

0

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

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

投稿2019/07/02 07:51

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokukinoko-0815

2019/07/02 08:00

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

0

自己解決

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

PHP

1 2<?php 3 4 for ( $i = 1 ; $i <= 100 ; $i++){ 5 if (!($i % 15)){ 6 echo $i ; 7 echo "Fizz Buzz<br/>" ; 8 }elseif 9 (!($i % 5)){ 10 echo $i ; 11 echo "Buzz<br/>" ; 12 }elseif 13 (!($i % 3)){ 14 echo $i ; 15 echo "Fizz<br/>" ; 16 }elseif 17 ($i % 15){ 18 echo $i."<br/>" ; 19 }elseif 20 ($i % 5){ 21 echo $i."<br/>" ; 22 }elseif 23 ($i % 3){ 24 echo $i."<br/>" ; 25 } 26 } 27 28?>

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

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

投稿2019/07/02 07:15

編集2019/07/02 07:51
dokukinoko-0815

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/02 07:23

最終的にどういうコードになったか回答に残しておくとあとで同じような悩みを抱えた人のためになりますので、回答編集してコード追記してもらえたらと。
dokukinoko-0815

2019/07/02 07:40

mts10806様 承知いたしました。 質問の追記に解決方法を載せてしまいましたので解決の方に載せます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/07/02 08:00 編集

今回のケースで !($i % 15) といった条件の書き方はかなり特殊です。 学習書を一通り終えた後、もう一度戻ってきて、コードを見直してみて下さい。
dokukinoko-0815

2019/07/02 08:16

te2ji様 ありがとうございます。 やはり、特殊でしたか。 途中までオリジナルで考えて、似たようなコードを書いている方のものを参考にしたので" ! "の使い方が理解しづらい(その時理解してもよくわからなくて頭に入ってこない)と感じていました。 もう一度、自分なりの別のコードを探ってみます。
sakura_hana

2019/07/03 07:04

横から失礼します。「!」はそれほど難しくありません。 「その後ろにあるboolのtrue/falseをひっくり返す」と思えばいいだけです。「!(true)」はfalse、「!(false)」はtrueです。 if文だけでなく「$isOn = !$isOn;」のように代入としても使えます。 ただ今回の場合は確かに不要かなと思います。 15の倍数でFizzとBuzzの間を空けないならforの中身は4行で済む(空ける場合はもう少し増える?)と思います。頑張ってください。
退会済みユーザー

退会済みユーザー

2019/07/03 07:23

今回は !(0) なので、ちょっと特殊って書きました。 素直に ($i % 15 === 0) とすべきです。 (ってのを学習書を一通り終えた後に気がついてほしかったんですけど。。。)
m.ts10806

2019/07/03 07:25 編集

>似たようなコードを書いている方のものを参考にしたので 参考先が気になりますね。 Webに公開されているものでしたらURLいただけますか?
dokukinoko-0815

2019/07/03 09:51

sakura_hana様 丁寧に教えていただきありがとうございます。 文章がとてもわかり易いです! 頭の中でこんがらがっていたのでやっとスッキリしました。 ありがとうございます。 4行。。。。4行。。。。マニュアル見ながら頑張ってみます。
m.ts10806

2019/07/03 09:57

コードを改行しなければ一行に(冗談ですけど) データの流れを整理すれば短いコードで同じ結果を出すことは充分に可能です。 三項演算子とかnull合体演算子とかは代表例ですね。
dokukinoko-0815

2019/07/03 09:57

te2ji様 丁寧に教えていただきありがとうございます。 なるほど、そんな書き方があったのですね。 朝、マニュアル読んで多分教えていただいたところを読んだと思うのですが、まだまだ理解が足りていないようです。 マニュアルを読み直して再度見に来てみます! 理解足らずに申し訳ございません。
dokukinoko-0815

2019/07/03 10:27

mts10806様 1行!?? 短いコードに憧れます。 書けるように頑張ります。 ありがとうございます。 FizzBuzzサイトはhttp://www.rosettacode.org/wiki/FizzBuzzです。 【PHP FizzBuzz】でいろいろなサイトをサーフィンしていた時にリンクでがはられていました。すみません、何処のサイトかは忘れてしまいました。
sakura_hana

2019/07/03 10:33

dokukinoko-0815さん 短くしすぎるとそれはそれで可読性が下がる場合もあるので、自分の理解出来る範疇でブラッシュアップしていくといいと思います。 mts10806さん 三項演算子使えば本当に1行でも出来ますね。(うっかり忘れてて素直にechoしてからifしてって想定してました) null合体演算子は実は初めて知りました。すっごい便利……今度から使います……
退会済みユーザー

退会済みユーザー

2019/07/03 10:33

> 理解足らずに申し訳ございません。 いえ、dokukinoko-0815 さんにはもっと時間がかかると認識していましたが、sakura_hana さんのコメントで、論点がずれそうな気がしたので慌ててコメントしました。誤解を与える表現になり申し訳ありません。 コメントはヒントになっています。学習書終了後に改めて読んでみて下さい。
sakura_hana

2019/07/03 10:46

te2jiさん、dokukinoko-0815さん 申し訳無いです、「" ! "の使い方が理解しづらい」というコメントに対してのみコメントしてしまいました。(私も「if ($i % 15)」ではないよなぁという感覚を前提としていたので端折っていました) いきなり全部理解しろってのも無理な話ですし、焦らず自分のペースで進めるといいと思います。
dokukinoko-0815

2019/07/03 10:52

あ、サイトは参考したサイトのことです。 すみません。 sakura_hana様 なるほど、可読性は重要ですね。 他の人が肩こらずに読めるようなコードを目標にします。 ありがとうございます。 te2ji様 色々なアドバイスを頂けて勉強になりますし、素直に嬉しいです。 誤解なんてとんでもございません。 ありがとうございます。
dokukinoko-0815

2019/07/03 11:23

sakura_hana様 ありがとうございます。 ”!( $i % 15)”が括弧内にあるのは if の構文の括弧という理解でよかったでしょうか。 二重括弧にも頭が混乱し始めました。
sakura_hana

2019/07/03 11:55

dokukinoko-0815さん 数学と同じように、カッコは内側から見ていけばいいです。 「if (!($i % 15))」というコードだったら、 ・$i%15が0の場合 「if(!(0))」となり、0はfalse扱い。それが!でひっくり返ってtrueに。なので「if(true)」。 ・$i%15が1以上の場合(例えば1の場合) 「if(!(1))」となり、1はtrue扱い。それが!でひっくり返ってfalseに。なので「if(false)」。
dokukinoko-0815

2019/07/03 12:10

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

2019/07/03 20:29

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

2019/07/04 11:02

mts様 なるほど、こんな書き方もあるのですね。 面白いです。 難読化しないように気をつけます。 ブックマークについては気になったサイトはしているのですが、自分の探している答えじゃないときはスルーしていました。できるだけブックマークする癖をつけます。 null合体演算子の方も気になってきましたので調べてみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問