我正在尝试根据日期/时间对多维数组进行排序,但是当我执行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 :(得分: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>';