2016-07-29 105 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);