• 締切済み

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