• ベストアンサー

phpでcontinueはなぜ1文字スキップする?

phpでcontinueはなぜ1文字スキップするんでしょうか?スキップするならcontinueじゃなくてskipですよね? このコードの結果は 0 1 2 3がなくて 4 と表示されます つまり0124です なぜ3がないんでしょうか?3をスキップしていますよね? 3になったらskip <?php for($i = 0; $i <= 4; $i ++){ if($i == 3) { continue; } echo $i."\n"; } ?>

質問者が選んだベストアンサー

  • ベストアンサー
  • agehage
  • ベストアンサー率22% (2752/12072)
回答No.6

//変数iはゼロで、{}内の処理をするごとに1を足せ、4になるまで繰り返せ for($i = 0; $i <= 4; $i ++){ //もし変数iが3なら、これ以降のforの処理を飛ばして、forの{}内の処理を最初からやれ if($i == 3) { continue; } //変数iを出力する echo $i."\n"; continueはforの{}に過去こまれている処理の最初に行けという意味です continueで飛ばしているので[echo $i."\n";]の行はやらないんです だから3が出てきません if($i == 3) { continue; } echo $i."\n"; ↑を if($i == 3) { //何もしない } else{ echo $i."\n"; } と書いても同じですね

okwaveokw
質問者

お礼

少しずつわかってきたような気がします ありがとうございます

その他の回答 (11)

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.12

回答No.8です。 ・あまり論理的に仕組みを調べたりしないんですか? 仕組みを調べたりする時期はとうに過ぎてしまった感じです。 最初に何度か調べて仕組みはわかったつもりになっているので、あとはひたすら構築と実行と確認です。

okwaveokw
質問者

お礼

その考え方も重要だなって思いました

回答No.11

>なにも変化がないですよね?そういうものなんですか? そういうものです。 なので、 そのIF分の後に「3以外の時の処理」 をたくさん書いていたとして、 3の時は、実行させたくないよ~ ってケースで使うものです。 なので、逆に書けば if ($i!=3) { /* 3以外の時の処理 */ ここに何か書いたのと同じ } これを、制御文で書いたものが、 continueなだけです。

okwaveokw
質問者

お礼

そのIF分の後に「3以外の時の処理」 をたくさん書いていたとして、 3の時は、実行させたくないよ~ ってケースで使うものです。 この部分で納得しました。

回答No.10

初心者のうちはフローチャートにしてみると分かりやすいですよ ------------- ◯ループ開始($iを 0から4まで繰り返す)ーー                     ↑  <もし $iが3ならば、次のループへ>ー→↑                     ↑  【$i と{改行}を表示】         ↑                     ↑ ◯ループ終わり    ーーーーーーーー→↑ -------------- PHPにはskipという命令はなくて 残りの行を実行させないで次のループに強制移行するのに continueという命令を使うことに違和感があるのでしょうけど、 他の言語でも沢山使われている命令語なので そういうもんだと納得するしかないでしょうね。

okwaveokw
質問者

お礼

ありがとうございます

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答No.9

>なぜ、3だけ表示されないんですか? 他の人の回答で既に十分説明されています。 質問文中のプログラムの($i == 3)の部分を($i < 3)とか($i != 1)に変えたらどういう結果になるか予想できますか。変更したプログラムを実際に実行して予想が合っていたかを確かめてみてください。

okwaveokw
質問者

お礼

ありがとうございます

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.8

・なぜ、3だけ表示されないんですか? 「なぜ」がPHPプログラミングのことであれば、他の回答者さまの投稿が参考になると思うので、私から言えることはありません。 「なぜ」がPHPが内部でどのような処理をしているからなのかと言うことであれば、私にはわからないので言えることはありません。 ---- 私はドキュメントを読んでもそれを信じないし、他の人に教わってもそれを信じません。 自分が書いたコードを実行した結果のみを信じています。 なので、なぜそうなるのかと聞かれたら、そう書いたからそうなるのだとしか言えません。 質問者さまにはPHPの実行環境がある前提で話しているので、もし実行環境がないのでしたら、用意して実行して確認されるのがいいと思います。

okwaveokw
質問者

お礼

あまり論理的に仕組みを調べたりしないんですか?

  • watanabe04
  • ベストアンサー率18% (295/1598)
回答No.7

3のときはcontinueによってecho $i."\n";が実行されないから。

okwaveokw
質問者

お礼

ありがとうございます

回答No.5

>なぜ、3だけ表示されないんですか? if($i == 3) {の判定で$iが3の時だけ、continueになり、 FOR分の{}の先頭に戻ったため、 その後の echo $i."\n"; 表示命令に来なかったからです。 3がないのではなく、3という表示物がないだけです。 なぜなら、表示命令に来てないだけだからです。

okwaveokw
質問者

お礼

戻るというのはなんとなくわかりました。つまり、echo $i."\n"; をじっこうしなかったから3を表示しなかったんですよね?これがわかっただけでだいぶスッキリしました。 ただ、 <?php for($i = 0; $i <= 4; $i ++){ if($i == 3) { continue; } echo $i."\n"; } ?> {にもどるという事は、 { if($i == 3) { continue; } なにも変化がないですよね?そういうものなんですか?

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.4

「continue」と綴り始めたのはどの言語かわかりませんが、 私が初めてこれにであった時には、 「それ以降のループ内の処理をせず、次のループ処理を『継続する』」と覚えました。 継続とは別に中断(break)があるので、 こちらに対する対義語のようなものだと思えば、 スキップではなくても、納得できるのではないでしょうか。

okwaveokw
質問者

お礼

なぜ、3だけ表示されないんですか? それだけ知りたいです 0 1 2 4 なのか

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.3

PHPにはskipという命令がありません。

okwaveokw
質問者

お礼

ありがとうございます

回答No.2

前回の補足、 >さらに、0からではなく、ここに来ていないの下から反映されてますか? コンソールの行数が足りないので、スクロールしていっただけで、出てますよ。 >あと、$i: 3というのはなんですか? これは、デバッガーが現在の変数をダンプ(値の中身を表示してくれる機能)をしているだけで、ソースには書かれていません。 今回の回答も、continueは1文字捨てるという考え方を 捨ててください!。 前回breakで、  for () {~}      ↑ここに来ると教えたはず。 continueは、逆に"{"に戻る命令だと思えばいいです。 今いるループ内の先頭に戻るというニュアンスで受け止め かならず、自分が思っている概念の否定ソースを 書き加えて実験してみることです。 「1文字」が気になるなら、「2文字にしてください」 たったそれだけで「1文字」という言葉が2度と出てこなくなります。

okwaveokw
質問者

お礼

なぜ、3だけ表示されないんですか? それだけ知りたいです 0 1 2 4 なのか

関連するQ&A