- 締切済み
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--) { 実行する命令 } -------------------------------- とすると、命令を実行することができませんでした。 このような場合、みなさんはどうなさるのでしょうか。 お知恵を拝借願います。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
私だったら、インデックス用の変数を新たに導入して、 $idx = sizoef( $HotData ) - 8; for ( $i = 0; $i < 4; $i++ ){ # 実行する命令 $idx--; } とするかな。
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を保持したいならば、複製してから 実行してください。
補足
なるほど。参考になりました。 ありがとうございました。
補足
ですね。私もその方がいいと思います。 ありがとうございました。