• 締切済み

forループの終了条件の記述方法

867です。よろしくお願いします。 csvファイルを読み込んで、forループで条件にヒットするものを表示する、というコードを組んでいるのですが、 ----------[OK.php]-------------- // $HotData がCSVファイルを二次元配列に読み込んだものとします。 for($i=sizeof($HotData)-1; ($i>=0)&&($i>=sizeof(HotData)-4); $i--) { 実行する命令 } -------------------------------- では、意図どおり新しいデータ4件(たとえば1,2,3,4)に対し、命令を実行できるのですが、次の4件(たとえば5,6,7,8)に対して別の命令を出したいとき、 -------------NG.php------------- for($i=sizeof($HotData)-1; ($i>=sizeof(HotData)-8)&&($i<=sizeof(HotData)-5); $i--) { 実行する命令 } -------------------------------- とすると、命令を実行することができませんでした。 このような場合、みなさんはどうなさるのでしょうか。 お知恵を拝借願います。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

私だったら、インデックス用の変数を新たに導入して、 $idx = sizoef( $HotData ) - 8; for ( $i = 0; $i < 4; $i++ ){ # 実行する命令 $idx--; } とするかな。

867
質問者

補足

ですね。私もその方がいいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#18290
noname#18290
回答No.1

for($i=sizeof($HotData)-1; ($i>=sizeof(HotData)-8)&&($i<=sizeof(HotData)-5); $i--) { 配列の要素が8件として この行の評価を判りやすく書くと for($i=7; ($i >= 0) && ($i <= 3); $i--) となってます。 $i=7での評価が偽となるため繰り返し処理は行われません。 やるなら、こうかな。 for($i = 0; $i < 4; $i++) { //最新4件  $tmp = array_pop($HotData);  // $tmpに対する処理 } for($i = 0; $i < 4; $i++) { //次の4件(5-8件目)  $tmp = array_pop($HotData);  // $tmpに対する処理 } $HotDataを保持したいならば、複製してから 実行してください。 

867
質問者

補足

なるほど。参考になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jQueryのforループ時のanimate

    jQueryにて下記のように 配列にて登録した要素に対して forループにてanimateを実行し、 completeで、animate完了後の動作を実行したいのですが、 forループにて複数に対して処理を行った際の挙動がおかしく、 動作を実行する前にcompleteの処理が走ってしまいます。 どのようにすれば、forループで複数のanimate処理をおこなっても 動くことができるようになるのか、 教えて頂けますよう宜しくお願いいたします。 -------------------------------------------------------------------- $(document).ready(function () {  for(i=0; i<10; i++){   pArray($('p').eq(i));  };  for(i=0; i<10; i++){   pArray[i].stop().animate({left: -100 * i}, {duration:1500, easing:'swing',complete:aaa()});  }  function aaa(){   alert('完了')  } }

  • 2次元配列から1次元配列へのデータ読み込み方法をお尋ねします。

    いつもお世話になります。 readtest.csvというCSVファイルを作り、データを次のように入れています。 a,apple,301,23 b,orange,518,47 c,grape,278,19 d,banana,189,36 この3列目のデータを取り出して1次元配列に入れるため、DBtest.phpを次のように書きました。 01: <?php 02: $Data=file("../readtest.txt"); 03: for ( $i = 0; $i < sizeof( $Data ); $i++ ) { 04: $line=explode(",",$Data[$i]); 05: echo $line[2]; // 301518278189 06: // $xdata=implode(",", $line[2]); 07: } 08: ?> この実行結果は、「301518278189」となります。なぜコンマが入らないのでしょうか? 5行目をコメントアウトして6行目を生かして実行すると、 Warning: implode() [function.implode]: Bad arguments. in C:\Program Files\Apache Group\Apache2\htdocs\DBtest.php on line 6 となります。 3列目のデータを抜き出して配列を作るにはどのようにすれば良いでしょうか? よろしくご教示頂ければ幸いです。

    • ベストアンサー
    • PHP
  • 配列の値をループ

    よろしくお願いします。 例えば、$ary=array(1,2,3,4,5,6,7); という配列があるとします。この1,2,3,4,5,6,7の値を ループで表現することは可能でしょうか?? for文で試してみましたが、 $hoge="for($i=0;$i<7;$i++){ print $i; }"; $ary=array($hoge); 表示結果 for($i= でした。""で囲んだのでそのまま文字としてなったんだと 思います。""をはずすとエラーになります。 理想の表示結果は当然 1,2,3,4,5,6,7です。 行いたいことの意図はわかっていただけたでしょうか? 可能な場合、どういう記述をすればうまくいくのでしょうか? それとも不可能なのでしょうか?よろしくお願いします。 環境 php4.4.4 apache2 winXP

    • ベストアンサー
    • PHP
  • forループを使うと上書きされてしまう・・・・

    NetBeansを使ってJAVAでツールを作っているのですが、 ループ作業でうまくいかないところがあります。 内容は テキストフィールドで入力された項目を、 全て別の画面で表示するというものです。 テキストフィールドを20個設置して、item配列をgetText()で作って それをforループで上から順番に表示しようとしているのですが、 結果を表示すると最後の一つしか表示されません。 ループが回る度に上書きされて最後しか残らないのだと思うのですが 全部表示する方法はないでしょうか? ↓ String[] item = new String[20];  //配列にまとめてます item[0] = item1.getText(); item[1] = item2.getText(); item[2] = item3.getText(); item[3] = item4.getText();  ・  ・省略  ・ item[18] = item19.getText(); item[19] = item20.getText(); for (int i=0; i<21; i++)        //ループで上から20項目表示しようとしてます items.setText(item[i] + "\n"); どんなことでもいいので情報をもらえると助かります。

    • ベストアンサー
    • Java
  • 配列のbindValue方法について

    <環境> サーバーOS:CentOS webサーバー:apache データベース:MySQL PHP5.2 現在、上記の環境でwebアプリを作成しています。 データベースにデータを登録する際にPDOを使用しているのですが、 二次元配列に格納されているデータを bindValue() できずに困っています。 データが多く、個数もその都度変化するので、二次元配列に格納しています。 簡易的ではありますが、以下のようなソースコードになります。 <ソースコード> $dataArray → データが格納されている二次元配列 $columns = array(':id', ':name'); → プレイスホルダー名を格納している配列 for($i = 0; $i < count($dataArray); $i++) { $stt = $dataBase -> prepare('insert into tb_test(id, name) values(:id, :name)'); for($j = 0; $j < count($dataArray[ i ]); $j++) { $stt -> bindValue($columns[ $j ] ,$dataArray[ $i ][ $j ]); } $stt -> execute(); } 二次元配列の1行分のデータをループで bindValue() してから execute() で実行しています。 これを二次元配列の行数回繰り返しています。 apacheのエラーログには特に何も表示されていませんが、 登録処理ができません。 このような forループ では実行できないのでしょうか?

    • 締切済み
    • PHP
  • std::for_eachに、ループカウンタを入れる方法。

    表題の通りなのですが、次のようなループのカウンタを呼び出される 配列に入れるにはどうしたらいいのでしょうか? const int MAX = 100; int Array[MAX] = {0}; /* //これと同じことをしたいのですが。。。。 for( int i=0; i<MAX; ++i )  Array[i] = i; */ for_each(Array, Array+MAX, /*ここはどうするのでしょう?*/); 調べてみましたが、めぼしいものがみつかりません。 もともと無理なものなのでしょうか? ご教授お願いします。環境はVC8です。

  • 配列生成される限り、ループしたい

    function arrayxml (){ urlで取得したXMLから、配列を取得 return $hairetu; //戻り値は多次元配列 } $data = arrayxml(); $cnt = count($data); do { for ($i=0; $i < $cnt; $i++) { $data = arrayxml($data[$i][0]); } } while (count($data) > 0); //関数によって配列が作られる限り このスクリプトではループはうまくされません。 $data = arrayxml($data[$i][0]);を--->arrayxml($data[$i][0]);にすると $cnt分ループされますが、do~whileのループはなされません。 関数で配列が生成される限り、do~whileループをさせたいのですが正しい方法を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • forループで$iを表示させるには?

    ループで文字連結は出来ないのですか? ↓がはまりどころです。 $test1 = "abc"; $test2 = "def"; for($i=1; $i<=2; $i++){ echo $test.$i; } 上記だと変数が見つかりませんってことでエラーになります。 $test.$iのところをカッコを付けたり評価させてみたりでいろいろ試したのですがどうにもうまくいかないのでご教授いただければと。 配列なら問題ないんですけど…。 $test[1] = "abc"; $test[2] = "def"; for($i=1; $i<=2; $i++){ echo $test[$i]; }

    • ベストアンサー
    • PHP
  • Java初歩。ループ問1~6の内1・2

    コンパイルの環境はあります。 『問題は、全て、 「forループ」を使って記述しなければなりません。 そして、 ループは、「forループのみ」と、限定されています。 (1)~(2)は、他にどんなやりかたがあるのか興味がありまして、質問させて頂きました。 (3)からは、ずっと試しているのですが、全くできません… (1) 100、50、200、150、300を管理している配列を作成し、その合計を実行結果のように 出力したいです。どう組めばよいのでしょうか? (1)の実行結果 800 (2) 100、50、200、150、300を管理している配列を作成し、その平均値を 実行結果のように出力する為にはどのようにくんだらよいのでしょうか?。 (2)実行結果 160 例えば、(1)はこんな感じでしょうか? class exercise_4_1 { public static void main(String args[]){ int a[] = new int[5]; a[0] = 100; a[1] = 50; a[2] = 200; a[3] = 150; a[4] = 300; int z = 0; for(int i = 0;i < args[0].length(); i++){ z += a[i]; } System.out.println(z); } (1)~(6)問目までありますので、よろしくお願いします。

  • PHPのループ数限界値について

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

    • ベストアンサー
    • PHP