我是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。
答案 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>