Как читать CSV построчно и выводить с php - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть CSV-файл, который содержит четыре поля данных:

date;place;time;event

Как видите, первое - это дата.

Мне нужно построчно читать CSV, сравнивать DATE с текущей датой и выводить десять строк, начиная со строки с текущей датой.

Я попробовал этот код:

<?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 и код, поэтому в основном я работаю с числами, а не с датами.

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Попробуйте это:

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 голос
/ 09 декабря 2011

если условие должно быть исправлено добавлением 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;
}
...