从文件中读取时间并找到最近的文件

时间:2013-04-06 17:21:36

标签: php date fgetcsv

我是PHP的新手,现在我有问题。我想制作一个有一天公共汽车时间的文件,并希望将来向用户显示最近的公共汽车。每天只有15辆公共汽车,所以它不会是一个大文件。我想保存这样的文件:0120,0230,1020,1340等等。我现在的想法是通过fgetcsv从这个文件中读取一个for循环并将所有时间存储在一个数组中,这些数据是>而不是约会(“他的”)。这将发生在控制器中。在我向用户显示输出的文件中,我将以大字体显示数组的第一个元素作为下一个总线,然后以较小字体显示接下来的10个元素。这会有用吗?我不确定我的时间格式。我可以将文本文件中的0230与date()的输出进行比较吗?

感谢您的帮助!

编辑:根据以下评论,我尝试了这个。根据我的理解,这应该在while循环的每次迭代中读取csv的一个元素,对吗?

<?php
$buses = 0;
$hoursMins = date("Gi");
$times = [];
if (($handle = fopen("1.csv", "r")) !== FALSE) 
{
    while (($element = fgetcsv($handle, 200, ",")) !== FALSE) 
    {
        if($hoursMins < $element)
        {
            $times = $element;
            echo $times[$buses++] . "<br />\n";
            $buses++;
        }

    }
    fclose($handle);
}
?>

这只是向我展示了755。

2 个答案:

答案 0 :(得分:1)

我建议改为使用date("Gi")。 “G”表示一小时的24小时格式,没有前导零。前导零可能会导致很多奇怪的问题,因为它们被认为是base8数值:

var_dump(0200); // int(128)

虽然date()fgetcsv()将返回字符串,但如果您将这些值转换为数字类型,则不执行零填充字符串只能避免可能出现的问题。

答案 1 :(得分:0)

是的,你可以。要以24小时格式将当前时间作为小时/分钟,请使用以下内容:

$hoursMins = date('Gi');

如果您在下午2:06运行此声明,则会获得1406。如果您在上午7:15运行它,您将获得715

完全披露:我原来的格式字符串为Hi,但 bparise 在另一个答案中正确解释,Gi更好。< / p>


要读取像您这样的小文件,请使用file_get_contents函数将整个文件压缩为字符串:

$timesList = file_get_contents('1.csv');

从那里,你可以将它“爆炸”成一个数组:

$times = explode(',', $timesList);

然后你可以循环遍历数组并查找大于或等于当前时间的时间。至于当前时间,你可能会在另一个答案中提到的Gi调用中使用date格式更好,因为如果小时小于10 AM,它将不会有前导零。< / p>