2016-07-29 68 views
1

我有一個遊戲時間的列表,所以說1:05 PM,2:05 PM,7:10 PM,10:15 PM等我使用多維數組和strcmpusort排序這些遊戲在從最早到最新的正確順序。uspon在PHP中的不正確結果

遊戲正在排序,但任何在晚上10點開始的遊戲都將在任何其他遊戲之前上市。所以我目前的排序是這樣的:

Dodgers 7/29/16 10:05 PM 
Angels 7/29/16 10:10 PM 
A's 7/29/16 10:15 PM 
Cubs 7/29/16 2:20 PM 
Jays 7/29/16 7:05PM 
Rays 7/29/16 7:15PM 
Astros 7/29/16 8:05 PM 

IHAVE現在已經排除此爲天。我試着用strtotime()來轉換我的日期字符串,但是usort根本不喜歡這個,我的排序變得隨機。我試圖用連字符而不是斜槓格式化日期/時間,但沒有任何變化。我已經'擦除'我的日期/時間字符串以及任何額外的字符。這裏是我的代碼:

$array[$timedate] = $string; 

// Multidimensional array of 'games' 
$games[] = array('date' => $timedate, 
       'title' => $string); 

// compare the dates and times 
function cmp($a, $b) 
{ 
    return strcmp($a['date'], $b['date']); 
} 

// Sort the array 
usort($games, "cmp"); 

回答

2

Usort想定義用戶定義的比較函數。你不需要那個。在strtotime()上使用clasic排序。

或者你可以使用kso​​rt,你如何在下面提到。下面是代碼,它的工作原理:我試圖用排序()

$game_times = array(array("Dodgers", "7/29/16 10:05 PM"), 
        array("Angels", "7/29/16 10:10 PM"), 
        array("A's", "7/29/16 10:15 PM"), 
        array("Cubs", "7/29/16 2:20 PM"), 
        array("Jays", "7/29/16 7:05PM"), 
        array("Rays", "7/29/16 7:15PM"), 
        array("Astros", "7/29/16 8:05 PM")); 

foreach ($game_times as $item) 
{ 
    $games[strtotime($item[1])] = array('date' => $item[1], 
             'title' => $item[0]); 
} 

ksort($games); 

var_dump($games); 
+0

,它拋出一個錯誤,但它讓我思考的是usort是錯誤的排序方法。所以我意識到ksort(根據多維數組的關鍵字進行排序)可以做到這一點,而且確實如此。感謝您切換我的焦點。 – xar86413

+0

好主意與ksort。我在答案中詳細闡述了它。 –

0
// Multidimensional array of 'games'                                         
    $games[] = array('date' => $timedate,        
        'title' => $string);         

    // Sort the array 
    ksort($games);