Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的usort不正确的结果_Php_Sorting_Strtotime_Usort - Fatal编程技术网

PHP中的usort不正确的结果

PHP中的usort不正确的结果,php,sorting,strtotime,usort,Php,Sorting,Strtotime,Usort,我有一个游戏时间列表,比如说1:05PM、2:05PM、7:10PM、10:15PM等等。我使用多维数组和strcmp以及usort按照从最早到最晚的正确顺序对这些游戏进行排序 游戏正在被分类,但是任何在晚上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

我有一个游戏时间列表,比如说1:05PM、2:05PM、7:10PM、10:15PM等等。我使用多维数组和strcmp以及
usort
按照从最早到最晚的正确顺序对这些游戏进行排序

游戏正在被分类,但是任何在晚上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

我已经解决这个问题好几天了。我试图使用
strotime()
转换我的日期字符串,但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");

Usort希望定义用户定义的比较函数。你不需要那个。在strotime()上使用clasic排序

或者您可以使用ksort,您在下面提到的方式。以下是有效的代码:

$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);

我尝试使用sort()并抛出了一个错误,但它让我认为usort是错误的排序方法。所以我意识到ksort(通过多维数组的键进行排序)会起作用,它做到了。谢谢你转移我的注意力。这是个好主意。我在回答中详细阐述了一下。
    // Multidimensional array of 'games'                                                                                                                                                                
    $games[] = array('date' => $timedate,                              
                     'title' => $string);                                 

    // Sort the array
    ksort($games);