PHP whileの意味を知りたい

このQ&Aのポイント
  • PHPでのwhile文の意味と使い方について教えてください。
  • while文は、指定した条件が満たされている間、繰り返し処理を行うための制御構造です。
  • while文は条件式を評価し、その結果が真である限り、繰り返し実行されます。
回答を見る
  • ベストアンサー

PHP whileの意味を知りたい

お世話になります。 $input=trim(fgets(STDIN)); while($input){ $array[]=$input; $input=trim(fgets(STDIN)); } 上記の意味を教えてください。 while (条件式) 実行する処理; 例 $num = 0; while (num < 2){ print "num=".$num; } 今まではこういった式を学んでいました。 while($input)の$inputという条件式?? $input=trim(fgets(STDIN));の意味も飲み込めないです。 解説を宜しくお願いします。

  • nkmyr
  • お礼率67% (403/600)
  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.2

while(条件式){ //処理 } 質問にあるように、この通りではあります。 ただ、『条件式』と言う言葉が、義務教育で慣れ親しんだ数学の『式』と繋がって、等号や不等号がないと式とはちょっと違いますよね。 条件式ではなく、条件と説明される場合もあったりします。 誤解を招きやすいですよね。 whileにおける括弧内の条件とは、条件にあるものが『True』と評価されたときと言うのが正しいです。 等号や不等号のある式を入れた場合は、その式の条件が満たされる場合はTrueと評価され、満たされなければFalseとなりループ処理は終了します。 条件を満たしている間繰り返すのがwhileと言うのはご存じの通りです。 while(True){ //処理 } このように書くと条件は常にTrueとなるので、無限にループされるということです。 ただ、phpでは変数の型や評価について曖昧なので、意図した結果と異なることもあります。 つまり、Trueと評価されるものと、Trueそのものは違うと言うことです。 この場合、以下のように記述して確認すべきだと思います。 //結果を見やすくするために追加 eho '<pre>'; while(条件){ //型と値を取得する関数 var_dump(条件); //処理 } 条件の変数の型、値が確認できます。 ループに時間がかかったり、終了しない場合であれば、while内でbreakして強制的に処理を終了させるようにしましょう。 この回答からキーワードを使って検索しても答えは出ると思いますが、自分で結果を確認して理解した方が良いです。 $input=trim(fgets(STDIN)); こちらについては、単純にそれぞれの関数のヘルプを見たら良いと思います。 あえて言うなら、STDINよりfgetしたものをtrimして$inputに代入する。 phpはマニュアルにかなり詳しく情報があるので、見てみると良いですよ。

nkmyr
質問者

お礼

初心者の私でも理解出来るような解説をありがとうございました。

その他の回答 (2)

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

while($input){} の場合、$inputという変数に何らかの値が入っていた場合は条件式が「真」になり、空っぽなら「偽」になります。(但し 0 を入力すると「偽」と判定されるので注意が必要) 例示されているプログラムだと、 最初のSTDINの入力で何らかの値が入っていた場合はループに入ります。 そして$inputの中身を$arrayという配列に入れて、再びSTDINを受け取ります。 STDINの入力で何らかの値が入っていた場合はループが継続し、Enterだけ押された時は$inputが空になるのでループが終了します。 $input=trim(fgets(STDIN)); についてですが、trim()関数は引数として与えられた文字列の前後にある空白や改行文字を取り除く関数です。 STDINからの入力は、入力者が値を入力した後のEnterまでを入力値として渡ってくるので、不要な改行文字を取り除く事が目的でしょう。

nkmyr
質問者

お礼

詳しく教えて下さってありがとうございました。 あーそういう意味かと理解出来ました。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

whileは条件式が真の時ループするわけですが、 0を偽、それ以外を真とするということがあります。 ので、0を入れるまでという意味になります。 trim(fgets(STDIN));は STDINから取り込んだ値には最後に打ち込んだEnterキーも 含まれていますので、それを取り除くということになります。

nkmyr
質問者

お礼

詳しく教えて下さってありがとうございました。

関連するQ&A

  • phpのプログラムについて

    <?php $n = trim(fgets(STDIN)) * 60; $m = trim(fgets(STDIN)); for ($i = 1; $i <= $m; $i ++) { $n -= trim(fgets(STDIN)); $o = $n >= 0 ? $i : $o; } echo $n >= 0 ? 'OK' : $o; ?> というコードの $o = $n >= 0 ? $i : $o; の部分の意味がわかりません。 ?の意味と:の意味教えて下さい。

  • xampp php コマンドライン入力

    標準入力を受け付けるプログラムの動作がおかしいのですが、原因を教えてください。 単体でインストールしたphp5.5では正常に動作します。 windows7 xampp_portableのphp5.4 c:\xampp\php 実行結果 a Input->:Print->a c:\php 実行結果 Input->:a Print->a ソース <?php $str; print "Input->:"; $str = trim(fgets(STDIN)); print "Print->$str\n"; ?> 以上、どなたかお願いいたします。 phpの勉強を始めたばかりなので、初歩的な質問に なっているかもしれません。

    • ベストアンサー
    • PHP
  • PHPのwhileの理解の仕方教えてください。

    初めまして。つい最近PHPを勉強しようと始めました。 初歩の初歩でまったくの知識がなく、参考書を何度も読んでいますが、 理解の仕方が分かりません。 下記のwhileの例文にについてお教えください。 <?php echo "整数を入力:"; $a = trim(fgets(STDIN)); $result = false; $n = 2; while($n <= $a/2){ if($a % $n == 0){ $result = true; } $n++; } if($result){ echo $a . "は、素数じゃないです。"; } else { echo $a . "は、素数です。!!"; } ?> 例文の中の$result = false; や$result = true;が 参考書には説明していなく、 どのようにwhileの構文では解釈すればよいのか お教えください。(あってもなくてもよいのか?) この$result = false;がなくてもPHPで動作はできるのは確認済みなのですが、 どうしてもこの部分が気になり、理解をしようと別の参考書のwhileの部分を読みましたが、 全く理解できませんでした。 この程度の知識で無謀だというのは十分承知しておりますが、 今後も同様な事(何が書いてあるか分からない)が起きると思いますので、 何か良いアドバイスをお願い致します。

  • [Java] while(true)の意味

    Javaの参考書で、下記の文がありました。 ... while(true){ 処理 } ... whileの条件式で“true”と書いてありますが、trueではなくなる(falseになる)のは どのような処理が実行された時でしょうか? 出来れば具体的なコードでご教示頂けると助かります。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • whileループの中でフォーム入力を入れられますか?(ループする処理メニュー選択の書き方)

    whileループの中にフォーム入力を入れたphpスクリプトを、ブラウザから指定しても何の動きもありません。 操作メニューをフォーム入力によって指定し、処理が終わればまた戻ってくる構造を、1つのセッションの中で行いたい場合はどのように記述すれば適切でしょうか。 実験したスクリプトは次のものです。 なお、このスクリプトからwhile文を削除した場合の動作は正常でした。 phpのバージョンは4.3.10です。 <?php // // form入力が入っているwhileループの実験 // while ($_POST['select_num'] != 2) { if (!isset($_POST['select_num'])) { $location_next = $_SERVER["PHP_SELF"]; print "<form method=\"post\" action\"{$location_next}\">"; print "<input type=\"radio\" name=\"select_num\" value=\"1\">選択1"; print "<br><br>"; print "<input type=\"radio\" name=\"select_num\" value=\"2\">中止"; print "<br><br>"; print "<input type=\"submit\" name=\"sbmt1\" value=\"OK\">"; print "</form>"; } else { print ("select_num = " . $_POST['select_num']); print "<br>"; } // if文の終了 } // while文の終了 print ("select_num = " . $_POST['select_num']); print "<br>"; print "whileループを終了しました<br>"; ?>

    • ベストアンサー
    • PHP
  • PHPwhileによる同じテキストを指定回数出力

    お世話になります。 入力される値 3 $input=fgets(STDIN); $i=1; while ($i<=$input){ echo $i."\n"; $i++; } 出力値 1 2 3 それを 出力値 おはよう おはよう おはよう と表示するにはどうすれば良いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • perlのdo-while文で抜け出せない 

    perlのwhile,do-while,last文に関する質問です。 1) code1のようなプログラムを作ったのですが   eでdo_whileを抜け出すことができませんがなぜでしょうか。 ---code1(eで抜け出せない)(NG)--- my $sum=0; do{  my $a=<STDIN>;  chomp($a);  $sum=$sum+$a; }while($a ne 'e'); print $sum; -------------------------------- 2) 抜け出す方法をいろいろ試していたら   while(1)にしてlastで抜けるようにすると   code2ではeで抜け出すことができるように   なりましたが、   do~while(1)にしたcode3では、  「Can't "last" outside a loop block at …」C   というエラーが発生します。   code2とcode3はwhileがdo~whileになって   条件を見る位置がループの始めか終わりの   違いだけなのに、なぜ、code2ではOKで、   code3ではエラーになるのでしょうか。 ---code2(eで抜け出せる)(OK)----- my $sum=0; while(1) {  my $a=<STDIN>;  chomp($a);  last if ($a eq 'e');  $sum=$sum+$a; }; print $sum; --------------------------------- ---code3(エラーになる)(NG)----- my $sum=0; do{  my $a=<STDIN>;  chomp($a);  last if ($a eq 'e');  $sum=$sum+$a; }while(1); print $sum; --------------------------------- よろしくお願いします。 Windows7 , ActivePerl(v5.16.3)

    • ベストアンサー
    • Perl
  • while文について教えてください。

     int num[10] = {2,4,6,8,10,12,14,16,18,20}; int n1 ,i;  i=0; n1=10; while(i++<n1) n1-=i; でプログラム実行するとwhile(i++<n1)でn1-=i;のとき  i=0の値は1になり、n1-1=9になると思うのです。  しかし、解説文を読むとn1-i=10のままなのです。  後置インクリメントでi++なので次のn1-i=i;のときは  既にi=1増える形だと思うのですがちがうのですか?  どなたか教えてくれるとたすかります。 

  • PHPwhileによるエラーの原因

    お世話になります。 PHPの勉強を始めたばかりの初心者です。 入力される値 2 8 出力値 2 3 4 5 6 7 8 と表示するように以下のプログラムを作成しました。 <?php $input=fgets(STDIN); $input2=fgets(STDIN); $i = $input; $a = $input2; while ($i<=$a){ echo $i."\n"; $i++; } ?> 結果「Runtime error(Exit status:null)」とエラーメッセージが出ます。 $i = $input; $a = $input2; を $i = 2; $a = 8; にするとうまく表示できます。 変数に代入する変数はこれで合ってますでしょうか? どこか、間違っているか、教えてくださいますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • php次の画像の解釈について $num1 に5を

    php次の画像の解釈について $num1 に5を代入する $num1はすでに5になっていて、 条件の中で5===5の条件式がブール型によって trueだから次の処理のに進む $str に "ok"を代入する その$strに代入された中身をechoによって出力する それでOKが出力された この認識であっていますか?

    • ベストアンサー
    • PHP

専門家に質問してみよう