php - 在 PHP 中对 DateTime 对象数组进行 USort - 没有错误,数组未排序

标签 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');

最佳答案

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

您的代码将生成

PHP Notice: A non well formed numeric value encountered in ...

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

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

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

enter image description here


如果您陷入 PHP 5 困境,请比较时间戳

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

关于php - 在 PHP 中对 DateTime 对象数组进行 USort - 没有错误,数组未排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55527653/

相关文章:

php - 如何在 Api-Platform 中为虚拟属性(property)引入过滤功能?

c# - 如何重写以下行以在 .NET 2.0 上工作?

PHP 按最大宽度和宽度大于高度对图片进行排序

php - 使用PHP将记录插入MYSQL数据库

php - MySQL:用新值替换特定外键的所有实例

php - CakePHP 3 保存 BelongsToMany 关联未知类型 ""错误

Python Pandas : Groupby date, 并按时间戳访问每个组

date - 将日期时间格式化为 RFC-3339 以用于 RSS 源

php - usort 在 php 中的自定义函数中

php - usort 改变数组的顺序