Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何安排列车发车时间?PHP自然排序?_Php_Natural Sort - Fatal编程技术网

如何安排列车发车时间?PHP自然排序?

如何安排列车发车时间?PHP自然排序?,php,natural-sort,Php,Natural Sort,我使用下面的代码来输出列车发车时间。但我不能按出发时间把它们分类。我对编码还不熟悉,所以不知道如何解决这个问题。如何使用自然排序或其他解决方案对其进行排序 <?php $url = 'http://api.sl.se/api2/realtimedepartures.json?key=xxxx&siteid=9192&timewindow=30'; $jsondata = file_get_contents($url); $json = json_d

我使用下面的代码来输出列车发车时间。但我不能按出发时间把它们分类。我对编码还不熟悉,所以不知道如何解决这个问题。如何使用自然排序或其他解决方案对其进行排序

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

可以在

查看输出示例。您可以使用该函数对数组进行排序

<?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)了,所以最好仔细研究一下,看看是否可以找到更干净的方法。

您可以使用该函数对数组进行排序

<?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)了,所以最好查看一下,看看是否可以找到更干净的方法。

您是否参考了
natsort
上的手册?另请参见
usort
。您是否参考了
natsort
上的手册?另请参见
usort
。太棒了!非常感谢,它很有效。但这仍然给我留下了一个问题。发车的列车($metro['DisplayTime']!=“Nu”)显示在最后。Nu现在是瑞典语,所以如果能够在编号的值之前显示“Nu”值,那就太好了。我做了一个“快速修复”并将“现在”出发时间设置为显示:无,这对用户来说不是真正相关的数据。再次感谢你解决了我的问题@我很高兴能帮上忙。您可以尝试添加
if($a['DisplayTime']=='Nu')返回-1到cmp函数的开始,将所有Nu移动到顶部。太棒了!非常感谢,它很有效。但这仍然给我留下了一个问题。发车的列车($metro['DisplayTime']!=“Nu”)显示在最后。Nu现在是瑞典语,所以如果能够在编号的值之前显示“Nu”值,那就太好了。我做了一个“快速修复”并将“现在”出发时间设置为显示:无,这对用户来说不是真正相关的数据。再次感谢你解决了我的问题@我很高兴能帮上忙。您可以尝试添加
if($a['DisplayTime']=='Nu')返回-1至cmp功能的开始,将所有Nu移动到顶部。