如何逐行读取CSV并使用php输出

时间:2011-12-09 13:28:58

标签: php date csv line

我有一个包含四个数据字段的CSV文件:

date;place;time;event

第一个是日期,如您所见。

我需要逐行读取CSV,将DATE与当前日期进行比较,并从当前日期的行开始输出10行。

我试过这段代码:

<?php
date_default_timezone_set("Europe/Zagreb"); 
$today = date('Ymd');

$file_handle = fopen("data.csv", "r");

while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 1024,";");

if ($line_of_text[0] >= $today) echo $line_of_text[0] . "-" . $line_of_text[1]. "-" . $line_of_text[2] . "-" . $line_of_text[3] . "<BR>";   
}

fclose($file_handle);    
?>

但我不能在10行之后打破这一点。我在CSV和代码中使用了 YYYYMMDD 日期格式,所以基本上我使用的是数字,而不是日期。

2 个答案:

答案 0 :(得分:4)

试试这个:

date_default_timezone_set("Europe/Zagreb"); 

$today = date('Ymd');

$file_handle = fopen("data.csv", "r");
$counter = 0;
while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle, 1024,";");
    if ($line_of_text[0] >= $today) {
        echo $line_of_text[0] . "-" . $line_of_text[1]. "-" 
            . $line_of_text[2] . "-" . $line_of_text[3] . "<br />";
        $counter++;
    }
    if ($counter == 10) break;
}

fclose($file_handle);

答案 1 :(得分:1)

如果条件应该通过添加strtotime来修复,然后才能进行比较:

if (strtotime($line_of_text[0]) >= strtorime($today))

您更正后的代码将是:

$counter = 0;
while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle, 1024,";");
    if (strtotime($line_of_text[0]) >= strtotime($today)) {
        echo $line_of_text[0] . "-" . $line_of_text[1]. "-" . $line_of_text[2] 
            . "-" . $line_of_text[3] . "<BR>";
        $counter++;
    }
    if ($counter == 10) break;
}