我正在尝试为公共交通的时间表构建一些应用程序。大多数情况都很简单,但我的想法是根据当前时间只展示一些片段。
我对来自官方的XML-feed非常不友好,其中显示的时间表数据如下所示:
<day day="31">
<hour hr="6">
<minutes>04</minutes>
<minutes>44</minutes>
</hour>
<hour hr="7">
<minutes>08</minutes>
<minutes>51</minutes>
</hour>
[…]
</day>
<day day="96">
<hour hr="6">
<minutes>06</minutes>
</hour>
<hour hr="7">
<minutes>47</minutes>
</hour>
<hour hr="9">
<minutes>59</minutes>
</hour>
[…]
</day>
嗯,首先我要说的是,这个day
标签并不意味着一个月或类似的特定日期,它标识(有些如何,我真的不确定为什么31和96)是它工作日或周末(坐着,晒太阳)。也可能只有一个,即。工作日或日常工作(<day day="127">
)。
这是通用的实际时间表,它只能有“工作日()”,“每天()”和“工作日()”+“周末()”的一个或两个不同的时间表。而已。没有约会。只有数字标识符“31”,“96”和“127”。
所以我正在尝试收集这些数据,并从与当前时间对应的数据中切出最接近的5个时间条目。所以我有两个问题:存储这些数据以进行处理的最佳方法是什么?如何处理数据以获得5个条目,但请记住,如果今天不再是传输或少于5,它应该根据明天的计划进行迭代。在一天(工作日或周末)。
解析XML没有问题。但问题是如何在最有效的结构中解析它。
结果我打算得到类似的东西:
18:30, 19:30, 20:30, 21:40, tomorrow 6:50
希望你说得对我好。我不是在等待解决方案,只是建议。我可以自己写一切。只需要概念。
答案 0 :(得分:0)
我确信有“PHP-XML Parsers”,但我不知道要保证。你可以使用PHP的xml_parse
编写自己的(不是那么难,单调乏味)创建一个适合您使用的数组,例如
$bus[year][month][day][hour][minute] = true;
循环使用,会给你你想要的东西。
祝你好运!
根据您的意见,如果您有一个数组:
$bus[0] = 364; // 6:04 am
$bus[1] = 404; // 6:44 am
然后你可以通过循环找到最接近的值。跟踪索引,并在此之前显示5个凹痕。
这里快速,肮脏,未经优化,请勿使用此示例:
<?php
error_reporting(0);
$friday = array(300,400,500,600,700,800,900,1000);
$saturday = array(320,420,520,620,720,820,920,1020);
$schedule = array(0 => $M, $T, $W, $T, $friday, $saturday, $S);
$dayNumber = 4;
$time = 720; // noon
$shown = 0;
foreach ($schedule[$dayNumber] as $hm) {
if ($hm > $time) {
$hour = floor($hm / 60);
$minute = $hm - ($hour*60);
echo "$hour:$minute, ";
$shown++;
}
if ($shown == 5) break;
}
if ($shown < 5) {
$time = 0;
echo 'Or tomorrow: ';
foreach ($schedule[$dayNumber + 1] as $hm) {
if ($hm > $time) {
$hour = floor($hm / 60);
$minute = $hm - ($hour*60);
echo "$hour:$minute, ";
$shown++;
}
if ($shown == 5) break;
}
}
?>
输出:
13:20, 15:0, 16:40, Or tomorrow: 5:20, 7:0,