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

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

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

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

Q&A

解決済

2回答

911閲覧

while構文でcontinueを使うと無限ループにような状態になる。

takub

総合スコア15

PHP

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

0グッド

0クリップ

投稿2018/09/09 13:13

編集2018/09/09 14:46

PHPを勉強中です
while構文でcontinueを使うと無限ループにような状態(更新しても30秒読み込みを続け、最終的に表示されない)になりました。
その理由がなぜかわからないため、質問させていただきます。

「何がしたかったのか」
7の倍数だけを抜いた1~100までの数字を改行して出力する

 →「continue文を使って7で割り切れる数字を出力しないようにする」

if($i % 7 == 0 ){
continue;
}

以下のコードで無限ループのような状態(更新しても30秒読み込みを続ける)になりました。

PHP

1 2$i = 0; 3while ($i <= 100){ 4 if($i % 7 == 0 ){ 5 continue; 6 } 7echo $i.'<br>'; 8$i++; 9} 10//結果:30秒でタイムアウト。(無限ループ??) 11

ちなみに$i++;の位置をずらした結果、思った結果がでたのでここが原因だと思います。

以下が上手くいったコードです。

PHP

1$i = 0; 2while ($i < 100){ 3$i++; 4 if( $i % 7 == 0 ){ 5 continue; 6 } 7echo $i.'<br>'; 8} 9//結果:7の倍数だけを抜いた、1~100までの数字を改行して出力 10

参考書,Progate,ネットの記事によって変数の更新($i++;)部分の位置はバラバラなので
どちらでも良いのかなと思っております。

また、処理の流れも以下のように解釈しており、問題点がどこか分かりません。
ーーーーーーーーーーーーーーーーーーーーーーーー
・初期化
・条件式の評価がtrueなのでループする
・(7で割り切れる場合のみ、処理をスキップする)
・$iを改行込で表示
・$i に1を足す。
ーーーーーーーーーーーーーーーーーーーーーーーー

初歩的な質問で恐縮ですが、よろしくお願いいたします。

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

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

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

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

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

kei344

2018/09/09 13:16

「上手く表示されない」とは「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
takub

2018/09/09 13:17

ありがとうございます。アドバイスを踏まえて質問を修正します。
退会済みユーザー

退会済みユーザー

2018/09/09 13:44

通常はfor文だな
takub

2018/09/09 13:47

ありがとうございます。continue使う場合、for構文を使うように覚えておきます。
退会済みユーザー

退会済みユーザー

2018/09/09 13:56

コンティニュー使う場合ではなく。判定対象が演算によって変動するから。
takub

2018/09/09 14:48

ありがとうございます。判定方法が演算によって変わることを覚えておきます
guest

回答2

0

ベストアンサー

・(7で割り切れる場合のみ、処理をスキップする)

以降の処理をスキップするため、$iの値が変わらず、ずっと0のままです。

投稿2018/09/09 13:23

otn

総合スコア84505

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

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

takub

2018/09/09 13:39

早速のご回答ありがとうございます。 continueの意味を理解していなかったかもしれません。 もう一度調べさせていただきます。
kei344

2018/09/09 13:46

To: takubさん echo 0 % 7; してみてください。
takub

2018/09/09 13:52

ご指摘ありがとうございます。下記理解させていただきました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー continue:以降の処理をスキップ echo $i.'<br>'; $i++;の部分がスキップして7のまま、次のループへ突入。これが繰り返されるのでエラー。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
kei344

2018/09/09 13:56

To: takubさん > $iの値が変わらず、ずっと0のままです。
takub

2018/09/09 13:58

kei344さん ありがとうございます。 0割る7の余りはそもそも0ですね、、。 みなさん、大変初歩的なミスで申し訳ないです。
guest

0

みなさま、ご教授いただきましてありがとうございました。
下記、理解できました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・初期値0に対して%を使っているので最初から表示されない。
if($i % 7 == 0 ){
continue;

・continue以降の処理はすべてスキップされるため、$iに+されない
→7以後に進めない。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

投稿2018/09/09 14:48

takub

総合スコア15

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

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

退会済みユーザー

退会済みユーザー

2018/09/09 14:53

ちがうw 0から進んでない
takub

2018/09/09 14:56

記述不足でした!すみません。 もし初期値が$i= 1でも ・continue以降の処理はすべてスキップされるため、$iに+されない →7以後に進めない。 です。
takub

2018/09/09 14:56

なんどもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問