如何按日期字段降序排序数组?

3
我有一个如下的数组。我希望按日期降序对该数组进行排序。但是我的代码没有起作用。
$tbData = Array
(
    [0] => Array
        (
            [0] => Baby Boo
            [1] => 31921
            [2] => 07 Oct, 2016 07:27 pm
        )

   [1] => Array
        (
            [0] => Moonshine
            [1] => 32110
            [2] => 07 Oct, 2016 09:12 pm
        )


    [2] => Array
        (
            [0] => Hulk
            [1] => 31374
            [2] => 13 Sep, 2016 03:00 pm
        )

    [3] => Array
        (
            [0] => Sweet SHAI
            [1] => 667
            [2] => 05 Oct, 2016 09:36 am
        )

    [4] => Array
        (
            [0] => Hulk
            [1] => 31374
            [2] => 13 Sep, 2016 03:01 pm
        )

    [5] => Array
        (
            [0] => Maple
            [1] => 2270
            [2] => 08 Oct, 2016 07:31 am
        )

    [6] => Array
        (
            [0] => Josie
            [1] => 
            [2] => 08 Oct, 2016 04:40 pm
        )
)

我正在尝试使用这个 Stack Overflow 问题解决此问题。但对我来说并没有起作用。
我的代码如下:
$name = 2;
usort($tbData, function ($a, $b) use (&$name) {
     return strtotime($a[$name]) - strtotime($b[$name]);
});

我的日期列与众不同,可能是我代码无法运作的原因。是否有其他解决方案?


1个回答

2
正如评论中所说,这里的核心问题在于strtotime无法理解您的日期时间格式。如果转换失败,则可以通过查看返回值(FALSE)来发现这一点。
因此,解决方案是使用另一个函数进行转换,例如date_create_from_format,并从该DateTime中提取时代秒值,然后使用date_timestamp_get进行比较,就像这样:
usort($tbData, function ($a, $b) {
    $sa = date_create_from_format('d M, Y H:i a',$a[2]);
    $sb = date_create_from_format('d M, Y H:i a',$b[2]);
    return date_timestamp_get($sa) - date_timestamp_get($sb);
});

谢谢,它可以工作。但是它是升序的。我认为您的返回函数应该是用于降序的。return date_timestamp_get($sb) - date_timestamp_get($sa); - Faisal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接