2016-05-06 58 views
1

我正在使用下面的代碼來輸出火車出發時間。但我無法按照出發時間對它們進行排序。我是新來的編碼,所以不知道如何解決這個問題。我如何使用自然排序或其他解決方案來進行排序?輸出的如何組織火車出發時間? PHP自然排序?

<?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

+0

您是否參考過'natsort'手冊? http://php.net/manual/en/function.natsort.php另見'usort'。 –

回答

0

觀看你可以使用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也如此)所以最好調查一下,看看是否能找到一個更清潔的方式。

+0

太棒了!非常感謝,它的工作原理。但是這仍然給我一個問題。最後顯示出發的列車($ metro ['DisplayTime']!=「Nu」)。 Nu現在是瑞典語,所以如果可以在編號值之前顯示「Nu」值,那就太好了。 –

+0

我做了一個「快速修復」,並設置「現在」離開時間顯示:無,這不是用戶真正相關的數據。再次感謝您解決我的問題。 @ScottBoy –

+0

很高興我能幫到你。你可以嘗試添加'if($ a ['DisplayTime'] =='Nu')return -1;'到cmp函數的開頭,將所有的Nu​​移動到頂端。 – ScottBoy