【问题标题】:How to organize train departure times? PHP natural sort? [duplicate]如何安排火车发车时间? PHP自然排序? [复制]
【发布时间】:2016-05-06 11:09:13
【问题描述】:

我正在使用以下代码输出火车出发时间。但我无法按出发时间对它们进行分类。我是编码新手,所以不知道如何解决这个问题。如何使用自然排序或其他解决方案进行排序?

<?php
    $url = 'http://api.sl.se/api2/realtimedepartures.json?key=xxxx&siteid=9192&timewindow=30';
    $jsondata = file_get_contents($url);

    $json = json_decode($jsondata,true);


    foreach ($json['ResponseData']['Metros'] as $metro) {
        if ($metro['DisplayTime'] != "Nu") {
            $output .= "<ul><li><strong>".$metro['DisplayTime'].".</strong>  </li>";
        } else {
            $output .= "<ul><li><strong>".$metro['DisplayTime']." avgår </strong></li>";
        }
        $output .= "<li>".$metro['GroupOfLine']."</li>";
        $output .= "<li> nr ".$metro['LineNumber']."  </li>";

        $output .= "<li> till<strong> ".$metro['SafeDestinationName']."</strong></li></ul>";

   }

   echo $output;
?>

输出示例可以在http://beta.tunnelbanakarta.se/slussen查看

【问题讨论】:

标签: php natural-sort


【解决方案1】:

您可以使用usort() 函数对数组进行排序。

<?php
function cmp($a, $b)
{
    if ($a['DisplayTime'] == $b['DisplayTime']) {
        return 0;
    }
    return ($a['DisplayTime'] < $b['DisplayTime']) ? -1 : 1;
}

$url = 'http://api.sl.se/api2/realtimedepartures.json?key=xxxx&siteid=9192&timewindow=30';
$jsondata = file_get_contents($url);

$json = json_decode($jsondata,true);

usort($json['ResponseData']['Metros'], "cmp");

foreach ($json['ResponseData']['Metros'] as $metro) {
    if ($metro['DisplayTime'] != "Nu") {
        $output .= "<ul><li><strong>" . $metro['DisplayTime'] . ".</strong>  </li>";
    } else {
        $output .= "<ul><li><strong>" . $metro['DisplayTime'] . " avgår </strong></li>";
    }
    $output .= "<li>" . $metro['GroupOfLine'] . "</li>";
    $output .= "<li> nr " . $metro['LineNumber'] . "  </li>";

    $output .= "<li> till<strong> " . $metro['SafeDestinationName'] . "</strong></li></ul>";
}

echo $output;
?>

应该可以,但是我已经很长时间没有使用这些函数(或 PHP),所以最好看看它,看看你是否能找到更清洁的方法。

【讨论】:

  • 太棒了!非常感谢,它有效。但这仍然给我留下了一个问题。出发的火车 ($metro['DisplayTime'] != "Nu") 显示在最后。 Nu 现在是瑞典语,所以如果可以在编号值之前显示“Nu”值,那就太好了。
  • 我做了一个“快速修复”并将“现在”出发时间设置为显示:无,这对用户来说并不是真正相关的数据。再次感谢您解决我的问题。 @ScottBoy
  • 很高兴我能帮上忙。您可以尝试将 if ($a['DisplayTime'] == 'Nu') return -1; 添加到 cmp 函数的开头,以将所有 Nu 移到顶部。
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多