2017-04-19 41 views
0

排序有了下面的代码,我得到留下的到来从API与[DisplayTime]如何将字符串转换为数字在PHP中正确的顺序

. $output .= "<ul><li><strong>" . $metro['DisplayTime'] . ".</strong> 

目前的时间就得到由只订第一个号码,例如
11分钟。
22:07。
26分钟。
6分钟。
8分钟。

但我需要它来正确完整的电话号码值进行排序:
下一班列车到达:
6分钟。
8分钟。
11分钟。
26分钟。
22:07。 (应分钟的时间后显示二十四小时制时间)

完整的代码片段:

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

$url = 'http://api.whateverurl.com'; 
$jsondata = file_get_contents($url); 

$json = json_decode($jsondata,true); 

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

foreach ($json['ResponseData']['Metros'] as $metro) { 
    if ($metro['DisplayTime'] != "Now") { 
     $output .= "<ul><li><strong>" . $metro['DisplayTime'] . ".</strong> 
</li>"; 
    } else { 
     $output .= "<ul style='display:none;'><li><strong>" . 
$metro['DisplayTime'] . " departs </strong></li>"; 
    } 
    $output .= "<li>" . $metro['GroupOfLine'] . "</li>"; 
    $output .= "<li> nr " . $metro['LineNumber'] . " </li>"; 

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

echo $output; 
?> 
+1

['intval'](http://php.net/manual/en/function.intval.php)然后['sort'](http://php.net/manual/en/function.sort。 PHP)? – Script47

+0

你的比较功能在哪里? “CMP”? –

+0

小时怎么办?可能会在2小时内结果? 'intval'由'22:07'制成,只是'22',所以这个值将在26分钟之前放置。您应该先删除冒号。 – LiTe

回答

0

有多种方式做你设置这取决于。你可以在你的查询中使用ORDER。你可以在第一个空格中使用php split将整数从字符串中分离出来。 $ numMins = split(“”,$ fullString,2); $ numMins [0]将保存该数字(使用intVal($ numMins [0])使其成为一个数字)。将该值推入数组,然后对最终数组进行排序。协调“分钟”。如果你希望显示的话,可以将其编号。

相关问题