2014-07-23 33 views
-2

我有一個數據數組,我想根據當前時間與我爲數組中的每個項目存儲的日期戳記值之間的時間差異對數組進行排序。嘗試以剩餘分鐘的順序排列數組

因此,舉例來說,現在是時候14點47分57秒,我的陣列可以有時間如下:

23:00:00 00:30:00 19:00:00 20: 30:00 00:00:00

排序時我想的陣列是按以下順序(與最接近當前時間第 - 時間總是要往前走不過)

19 :00:00 20:30:00 23:00:00 00:00:00 00:30:00

有什麼建議我需要看什麼?從數據庫中獲取值時,我查看了TIMESTAMPDIFF,但我得到的結果不匹配。 我也可以檢索當前時間和物品數組時間之間的差異,並基於此分類,但是想知道是否有「更清潔」的方式。

我正在使用codeigniter,如果有人知道任何助手可以簡化這一點。

任何幫助讚賞,歡呼聲。

回答

1

我會建議你使用usort

$time_now = new DateTime('...'); 
$times=[...]; 

function cmp($a, $b) { 
    if ($a == $b) { 
     return 0; 
    } 
    return 
     ($today->diff(new DateTime($a)) < $today->diff(new DateTime($b))) 
      ? -1 : 1; 
} 

usort($times, "cmp"); 

希望它能幫助。

+0

謝謝Mudasobwa,我設法使用usort進行排序 –

0

如果你有一個字符串數組,也許你可以先排序你的數組,然後嘗試根據索引重新排列它......這樣的事情?

<? 
$times = array("23:00:00","00:30:00","19:00:00","20:30:00","00:00:00"); 
$times = sortByTime($times); 

$nextTimes = getNextTimes($times,"14:47:57"); 
var_dump($nextTimes); 

function sortByTime($array) 
{ 
     $ret = array(); 
     foreach($array as $time) 
     { 
       $ret[strtotime($time)] = $time; 
     } 
     ksort($ret); 
     return $ret; 
} 

function getNextTimes($array,$hour) 
{ 
     $timestamp = strtotime($hour); 
     $index = 0; 
     foreach($array as $key=>$val) 
     { 
       if($timestamp < $key) 
       { 
         break; 
       } 
       $index++; 
     } 
     return array_merge(array_splice($array,$index),array_splice($array,0,$index)); 
} 
?>