2016-05-06 12 views
1

Ich verwende den folgenden Code, um die Abfahrtszeiten der Züge auszugeben. Aber ich kann sie nicht nach dem Zeitpunkt der Abreise sortiert bekommen. Ich bin neu im Codieren, also bin ich mir nicht sicher, wie ich das lösen soll. Wie kann ich Natural-Sortierung oder eine andere Lösung verwenden, um dies zu sortieren?Wie organisiert man Abfahrtszeiten? PHP natürliche Art?

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

Beispiel des Ausgangs kann bei http://beta.tunnelbanakarta.se/slussen

+0

Haben Sie das Handbuch zu 'natsort' gelesen? http://php.net/manual/en/function.natsort.php Siehe auch 'usort'. –

Antwort

0

sehen Sie die usort() Funktion nutzen könnte das Array zu sortieren.

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

Sollte funktionieren, aber es ist eine lange Zeit her, dass ich diese Funktion (oder PHP für diese Angelegenheit) verwendet so gut aussehen, in sie zu sehen, ob Sie eine sauberere Weg finden können.

+0

Großartig! Vielen Dank, es funktioniert. Aber das hinterlässt immer noch ein Problem. Die Züge, die abfahren ($ metro ['DisplayTime']! = "Nu") werden zuletzt angezeigt. Nu ist Schwedisch für Now, also wäre es großartig, wenn es möglich wäre, die "Nu" -Werte vor den nummerierten Werten anzuzeigen. –

+0

Ich machte eine "schnelle Lösung" und stellte die "jetzt" Abfahrtszeiten zur Anzeige: keine, es sind nicht wirklich relevante Daten für den Benutzer. Nochmals vielen Dank für die Lösung meines Problems. @ScottBoy –

+0

Ich bin froh, ich könnte helfen. Sie könnten versuchen, 'if ($ a ['DisplayTime'] == 'Nu') hinzuzufügen -1;' an den Anfang der Cmp-Funktion, um alle Nu-Einsen an die Spitze zu bewegen. – ScottBoy

Verwandte Themen