在PHP中使用不正确的结果

时间:2016-07-29 08:11:08

标签: php sorting strtotime usort

我有一个游戏时间列表,所以说下午1:05,下午2:05,晚上7:10,晚上10:15等等。我正在使用多维数组和strcmpusort进行排序从最早到最晚,这些游戏的顺序正确。

游戏正在进行排序,但任何在晚上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

我已经对这几天进行了故障排除了。我尝试使用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 个答案:

答案 0 :(得分:2)

Usort希望定义用户定义的比较功能。你不需要那个。在strtotime()上使用clasic sort。

或者你可以使用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);

答案 1 :(得分:0)

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

    // Sort the array
    ksort($games);