Usort在PHP中的DateTime对象数组上-没有错误,数组未排序

时间:2019-04-05 03:06:04

标签: php datetime usort

我有一个长的多维数组,其中包含一些DateTime对象。我想基于[startdate]对象对整个数组进行排序。我正在使用此usort函数(基于大量的在线资源以及对各种错误的修改)。它不是对数组排序。

我的数组的格式如下。仅显示简洁起步。

Array
(
    [] => Array
        (
            [startdate] => DateTime Object
                (
                    [date] => 2019-04-10 19:00:00.000000
                    [timezone_type] => 3
                    [timezone] => America/New_York
                )

            [starttime] => DateTime Object
                (
                    [date] => 2019-04-10 19:00:00.000000
                    [timezone_type] => 3
                    [timezone] => America/New_York
                )

这是我的usort代码:

function date_compare($a, $b) {
    $t1 = $a["startdate"]->format('Y-m-d H:i:s');
    $t2 = $b["startdate"]->format('Y-m-d H:i:s');           
    return $t1 - $t2;
}    
usort($allEventsSimple, 'date_compare');

我还尝试使用以下代码对DateTime对象进行排序:

function date_compare($a, $b) {
    $t1 = var_dump($a[startdate]);
    $t2 = var_dump($b[startdate]);          
    return $t1 - $t2;
}    
usort($allEventsSimple, 'date_compare');

1 个答案:

答案 0 :(得分:1)

您实际上确实有错误,只是看不到它们(请参阅How to get useful error messages in PHP?

您的代码将产生

  

PHP注意:在...中遇到的格式不正确的数值

这是因为您正在尝试从另一个字符串中减去一个非数字字符串。

如果您使用的是PHP 7,则可以直接将DateTime实例与名叫"spaceship operator"的实例进行比较,例如

return $a['startdate'] <=> $b['startdate'];

enter image description here


如果您坚持使用PHP 5,请比较时间戳记

return $a['startdate']->getTimestamp() - $b['startdate']->getTimestamp();