- 締切済み
PHPで現在時刻を取得して、csvと照らし合わせる方法
こんにちは。いつも参考にさせてもらっています。 さて、本題なのですが、PHPでdate関数を使い現在時刻を3もしくは4桁で取得し、 それと次のようなcsvを照らし合わせて駅の発車案内みたいなものを、 作成しています。 ■csvの内容(発車時刻,種別,両数,始発,行先,発車番線 の順。あくまでも一例です。) 947,快速,8両,始発,東京,4 955,各駅停車,11両,,新宿,3 1001,快速,10両,始発,池袋,5 1011,各駅停車,8両,,大崎,6 1018,特別快速,15両,始発,品川,7 (csv終わり) もし時刻が9時45分だった場合、947の行から1001の行まで3行分、 もし時刻が9時59分だった場合、1001の行から1018の行まで3行分をデータとして扱いたいのです。 この場合はどうすればいいのでしょうか? 回答をお待ちしております。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>もし時刻が9時45分だった場合、上記の例で$iに1を、 >もし時刻が9時59分だった場合、上記の例で$iに3を代入できるような、 >方法はありますでしょうか? 意味がわからない・・・・ $iはループのカウンタ用の変数でしょ?それに値を代入するって?? ご提示のソースをみるかぎり$file配列をforeachでまわせばよいように 見えます。#1で提示したソースを完全に無視しているようですが フロー的には同じなので修正してつかってください
- yambejp
- ベストアンサー率51% (3827/7415)
fgetcsv()をwhileでまわしながら0番目のデータをチェックし カウンタで3個データを取得すればよいでしょう。 <?php $now=Date("Gi"); $handle = fopen("test.csv", "r"); $count=0; while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if($data[0]>=$now){ $datas[]=$data; $count++; } if($count>=3) break; } fclose($handle); print "<pre>"; print_r($datas); print "</pre>"; ?> http://www.php.net/manual/ja/function.fgetcsv.php
補足
yambejpさん、素早い回答ありがとうございます。 ですが、プログラムの構造上for文を使って、 $file = @file("data.csv"); $lines = @count($file); $col_from = (データを抜き出す始めの行数) ; $col_to = $col + 3 ; for( $i = $col_from; $i < $col_to; $i++ ){ $a[$i] = split(",", $file[$i]); (以下処理) こんな感じになっているので、 もし時刻が9時45分だった場合、上記の例で$iに1を、 もし時刻が9時59分だった場合、上記の例で$iに3を代入できるような、 方法はありますでしょうか?