• 締切済み

whileで最後のループを判別するには?

環境:php5 Q. DBから取得した値をwhileでループさせたとき、最後のループを取得するにはどうしたらいいのでしょうか? 現状ではループさせる数を最初に取得して、whileさせているときに$i++でカウントさせながら、合計の数とイコールになったときに最後と判断させていますが、もっとスマートに記述する方法などはあるのでしょうか? smartyだとlastで取得できるみたいですけど。 ご教授いただけると幸いです。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

結果を変数に代入していけば、ループが終わった後にはいってるデータが 最後のデータでは? 最後のデータだけほしいなら、ソート順を逆にして、LIMIT 1で拾えるし どういう状況で最後をしりたいかによりますね。

関連するQ&A

  • While 二重ループ処理について

    Bashのシェルスクリプトでwhileを使いループの処理を行いたい。 現状以下のようにファイルAの中に値”1”とイコールの場合に$awkを表示しています。 これを値”1”部分へファイルBの中の値を順にチェックできるようにしたいのです。 while IFS="$LF" read $READ_R record; do IFS='; ' set -- $record for awk in $3; do if [ "$awk" == "1" ]; then for awk in $4; do echo "$awk" done fi done done < "$1" 初心者のため分かり難い質問かもしれませんがよろしくお願いします。

  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • Whileループ時の改行?

    以下のようなコードで Whileでループさせると ランキングという文字と表のヘッダの間にかなりの間が開いてしまいます。(3-4画面分) 出力された結果に関しては問題ないので その間にあいてしまう隙間だけが問題なのですが、 もう少しループ回数が少ないものだとその間にあく隙間も少ないのでループの記述の仕方等が原因だろうとは思うのですが、わからないのでお知恵を拝借したいのです。 よろしくお願いします。 ちなみにDBへの接続等はHTMLタグの前に記述しています。 <HTML> <HEAD><TITLE>ランキング</TITLE></HEAD> H1 ALIGN="CENTER">ランキング</H1></FONT> <TABLE BORDER="2" > <TR><TD ALIGN="CENTER" COLSPAN="3"></TD>       <TD COLSPAN="4">出走回数</TD> <TR><TD ALIGN="CENTER">名前</TD>       <TD本賞金</TD>       <TD>収得賞金</TD>       <TD>TOTAL</TD>       <TD>1期</TD>       <TD>2期</TD>       <TD>3期</TD> <?php while( $recsp = mysql_fetch_array( $rssp, MYSQL_ASSOC ) ){ ?> <TR> <TD><A HREF="PODATA2004.php?KEY=<?php HESC( $recsp['ID']); ?>"><?php HESC( $recsp['Name']); ?></A></TD> <b><TD><h3><?php HESC( $recsp['SUM_TP']);?></h3></TD></B>     <TD><h3><?php HESC($recsp['SUM_GP'] ) ?></h3></TD>     <TD><h3><?php HESC($recsp['Race_Date_Count'] ) ?>回</h3></TD>     <TD><h3>回</h3></TD>     <TD><h3>回</h3></TD>     <TD><h3>0回</h3></TD> </TR>

    • ベストアンサー
    • PHP
  • PHPのループ数限界値について

    PHPのループ数限界値について 宜しくお願い致します。PHP 5.1.6を使用しております。 PHPのforやwhileのループ処理について、限界のループ数というのは存在するのでしょうか? 今作っているプログラムで、約15,000項目の配列と約10,000項目の配列で2重のループ処理しています。 この場合のループ数は15,000×10,000=150,000,000回の繰り返し回数となってしまいます。 しかも、この配列数は今後も増える可能性が高いです。 ループの限界値が何回なのか、教えてください。

    • ベストアンサー
    • PHP
  • foreachの2重ループ

    PHPのSmartyで2重ループがうまくできません。 表をforeachで作成したいです。 縦、横のセル数は変数で可変にしたいため、$oneと$twoにはそれぞれ毎回違う値が入る予定です。 <table border="1"> {foreach from=$one item="one"} <tr> {foreach from=$two item="two"} <td> {$two} </td> {/foreach} </tr> {/foreach} </table> 上記のプログラムだと、内側のループが1回しか回りません。 foreachの2重ループの仕方が間違っているのでしょうか?

    • ベストアンサー
    • PHP
  • 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
  • こんにちは、PHP初心者です。

    こんにちは、PHP初心者です。 Smartyを利用してWebサイトを構築中です。 Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトを privateプロパティ($_db)に設定しているのですが$_dbの値が アクセサメソッドを通じてgetすると空白になってしまいます。 色々やってみましたが理由が分からず、 ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。 なぜコンストラクタ外に出るとprivateプロパティの値が取得できなくなるのか分かりません。 どなたかご教示ください。 どうぞよろしくお願いします。 下記ソースです。 *(Smarty.classの派生クラス)********************************************** <?php require_once("DB.php"); require_once("Smarty.class.php"); class MySmarty extends Smarty{ private $_db; public function __construct(){ parent::__construct(); $this->template_dir="C:/xampp/modules/access_control/templates"; $this->compile_dir="C:/xampp/modules/access_control/templates_c"; $this->config_dir="C:/xampp/config"; $this->config_load("access_control.conf",basename($_SERVER['SCRIPT_NAME'],".php")); $tihs->_db=DB::connect($this->get_config_vars('db_string')); if (PEAR::isError($db)) { die($db->getMessage()); } } public function __destruct(){ $this->_db->disconnect(); } public function get_db(){return $tihs->_db;} } ?> *********************************************** *(メインのPHP)********************************************** <?php require_once("../../modules/access_control/class/MySmarty.class.php"); require_once("../../modules/access_control/class/name_search.class.php"); $o_smarty=new MySmarty(); $db=$o_smarty->get_db(); ←ここで値が取得できない $o_smarty->assign("toolname",name_search::getToolName($db)); $o_smarty->display(basename($_SERVER['SCRIPT_NAME'],".php").".tpl"); ?> ***********************************************

    • ベストアンサー
    • PHP
  • while()から得られるインデックス..

    お世話になります。 whileでSQLデータベースから抽出した一覧(list.php)から、htmlのフォームのラジオボタンを使って SQL上のデータを修正したいと考えていますが、うまくいきません。 list.php------------------------------------------- 1 <? 2 $db = mysql_connect('localhost','user','pass'); 3 $db_name = 'db'; 4 $TBL = "test"; 5 $str_sql = "SELECT * FROM {$TBL}"; 6 $rs = mysql_query($str_sql,$db); 7 $cnt =mysql_num_rows($rs);//データの個数 8 ?> 9  10 <form action="record.php" method="post" name="form1"> 11 <table> 12 <? while($arr_record = mysql_fetch_assoc($rs)){?> 13  <tr> 14  <td> 15  <input name="disp[]" type="radio" value="<? print $arr_record[id];?>"<? if($arr_record[disp] == 1){print" checked=\"checked\"";}?> /> 16  <input name="id[]" type="hidden" value="<? print $arr_record[id];?>"> 17  </td> 18 </tr> 19 <? }?> 20 </table><br /><br /> 21 <input type="hidden" name="cnt" value="<? print $cnt;?>"> 22 <input type="submit" name="Submit" value="Submit" /> 23 </form> list.php ここまで---------------------------------- record.php----------------------------------------- 1 <? 2 $cnt = $_REQUEST['cnt'];//データの個数 3 4 for($i=0;$i<=($cnt-1);$i++){ 5 $disp = $_POST['disp'][$i]; 6 $id = $_POST['id'][$i]; 7 8 if($disp == $id){$disp = 1;}else{$disp = 0;} 9 10 $str_sql = "UPDATE {$TBL} SET disp='{$disp}' WHERE id='{$id}'"; 11 mysql_query($str_sql,$db); 12 } 13 ?> record.php ここまで------------------------------- list.php15行目の <input name="disp[]" type="radio" .. /> は、 record.php5行目の $disp = $_POST['disp'][$i]; で[0][1][2][3]..と値を取得できるものと考えておりますが ここが取得できていないようです。 $disp = $_POST['disp'][0]; ↑これだけは、正しく値が取得できるのですが、[1]以降は取得できていません。 record.php6行目の $id = $_POST['id'][$i];は、[0][2][3]..と取得できているため while文や for文の間違いではないと思うのですが・・。 初心者から本を見ながらの独習のため、基礎的な間違いもあるかと思います。 もう2日も悩んでいます。先輩方よろしくお願いします!!

    • ベストアンサー
    • PHP
  • MySQLで一番最後のレコードをしる関数って?

    MySQLで一番最後のレコードを知る関数ってありますか? noや時間情報のソートの最初の値ではなく、簡単に最後に追加したレコードを取得する方法。 ないなら、方法としてはレコード数をカウントして、全カウント数番目をselectすればいいんでしょうか? SQLには、最後とかの概念がないかな?

    • ベストアンサー
    • MySQL
  • こんにちは、PHP初心者です。

    こんにちは、PHP初心者です。 Smartyを利用してWebサイトを構築中です。 Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトをprivateプロパティ($_db)に設定しているのですが,query文のところでエラーSELECT * FROM books [nativecode=1046 ** No database selected]となります。ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。なぜコンストラクタ外に出るとエラーになるのかわかりません。どなたかご教示ください。どうぞよろしくお願いします。 下記ソースです。 =====派生クラス======================= <?php $user = "dbuser"; $pass = "dbpassword"; $name = "mobilephp"; $host = "localhost"; require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); class MySmarty extends Smarty { private $_db; public function __construct() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; $this->_db=DB::connect("mysql://$user:$pass@$host/$dbname"); } public function __destruct() { $this->_db->disconnect(); } public function get_db() {return $this->_db;} } ?> ======end===================================== ==========メインのPHP=================================== <?php require_once("../MySmarty.class.php"); $o_smarty=new MySmarty(); $db=$o_smarty->get_db(); $stt=$db->query("SELECT * FROM books");←ここでエラーになる $data=array(); while($row=$stt->fetchRow(DB_FETCHMODE_ASSOC)){ $data[]=array("isbn"=>$row['isbn'],"title"=>$row['title'], "publish"=>$row['publish'],"price"=>$row['price']); } $o_smarty->assign("data",$data); $o_smarty->display("structure.html"); ?>

    • ベストアンサー
    • PHP