2015-09-07 60 views
0

我想基于日期/时间对多维数组进行排序,但是当我执行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); 
+0

做'return'前检查的'$ d1'和'$ d2'值,看看它们是你期待什么。也许给数组项的一些示例值,以便我们产生问题。 –

+0

尝试使用'strcmp' –

回答

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.

1

从PHP手册,你可以尝试更新你的dateSort()函数

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

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

+0

我试着粘贴上面的代码,它根本不会改变排序顺序。经过进一步调查,我认为现在是我的问题。您可以在排序后看到数组演示:http://www.aaron-schpitzer.ca/en/events –

+0

它几乎看起来像时间被完全忽略,id在同一天 –

+0

@ IVAOCA-WM更新了代码。原始代码来自PHP手册,我建议你自己更新你的代码... –