根据日期/时间对数组进行排序

时间:2015-09-07 02:12:15

标签: php arrays sorting datetime

我正在尝试根据日期/时间对多维数组进行排序,但是当我执行print_r时它似乎没有正常工作。我最好的猜测是我提供给strtotime()的时间格式不正确,但是日期和时间格式都列出了,但是在php手册中单独列出并且不会抛出任何错误。

我使用的格式在代码中不清楚,所以这里是:yyyy-mm-dd hhmm(24h没有冒号GMT)

以下是代码:

function dateSort($a, $b){
    $d1 = strtotime($a['date'].' '.$a['startTime']);
    $d2 = strtotime($b['date'].' '.$a['startTime']);
    return $d1 - $d2;
}    
usort($events, 'dateSort');
print_r($events);

2 个答案:

答案 0 :(得分:1)

从Php手册中,您可以尝试更新dateSort()函数

function dateSort($a, $b){
    $d1 = strtotime($a['date'].' '.$a['startTime']);
    $d2 = strtotime($b['date'].' '.$a['startTime']);
    return ($d1 < $d2) ? -1 : 1;
}    

建议你给我们一些输出,更容易从那里拿出来。

答案 1 :(得分:1)

IVAO。 你在第三行片段中输入了一个拼写错误。第二行是$a,但第三行是$b$a:)。

另外,我认为,你根本不需要使用strtotime。看看片段:

<?php

function dateSort($a, $b)
{
    $d1 = floatval(str_replace('-', '', $a['date']) . " $a[startTime]");
    $d2 = floatval(str_replace('-', '', $b['date']) . " $b[startTime]");
    return $d1 - $d2;
}

$events = [
    ['date' => '2015-05-01', 'startTime' => '2300', 'value' => 'Event 1'],
    ['date' => '2012-05-01', 'startTime' => '1430', 'value' => 'Event 2'],
    ['date' => '2011-09-17', 'startTime' => '1021', 'value' => 'Event 3'],
    ['date' => '2001-01-22', 'startTime' => '0959', 'value' => 'Event 4'],
    ['date' => '1999-02-05', 'startTime' => '1740', 'value' => 'Event 5'],
];

usort($events, 'dateSort');
echo '<pre>' . print_r($events, 1) . '</pre>';

And click to codepad.