在Javascript或PHP中获取一片数据

时间:2011-10-21 14:55:54

标签: php xml

我正在尝试为公共交通的时间表构建一些应用程序。大多数情况都很简单,但我的想法是根据当前时间只展示一些片段。

我对来自官方的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

希望你说得对我好。我不是在等待解决方案,只是建议。我可以自己写一切。只需要概念。

1 个答案:

答案 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,