0

我是 PHP 新手,现在有问题。我想制作一个包含一天巴士时间的文件,并希望向用户展示未来最近的巴士。每天只有15辆公共汽车,所以不会是一个大文件。我想过像这样保存文件:0120、0230、1020、1340 等等。我现在的想法是通过 fgetcsv 使用 for 循环从该文件中读取,并将所有时间存储在一个大于日期(“His”)的数组中。这将发生在控制器中。在我向用户显示输出的文件中,我将以大字体显示数组的第一个元素作为下一个总线,并以较小的字体显示接下来的 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。

4

2 回答 2

1

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

var_dump(0200); // int(128)

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

于 2013-04-06T17:59:43.593 回答
0

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

$hoursMins = date('Gi');

如果您在下午 2:06 运行此语句,您将得到1406. 如果你在早上 7:15 运行它,你会得到715.

完全披露:我最初有格式字符串,Hi但正如bparise在另一个答案中正确解释的那样,Gi更好。


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

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

从那里,您可以将其“分解”成一个数组:

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

然后,您可以遍历数组并查找大于或等于当前时间的时间。至于当前时间,您可能会更好地使用另一个答案中提到Gi的通话格式,date因为如果小时小于上午 10 点,它不会有前导零。

于 2013-04-06T17:34:40.443 回答