php-错误排序数组,时间戳为值

时间:2015-12-28 22:17:12

标签: php arrays sorting

这可能是一个简单的,但我一直在努力为数组正确排序输出。 我想按日期时间值按升序对以下数组进行排序。

Array ( 
[2] => 
[5] => DateTime Object ( [date] => 2015-10-08 08:30:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
[6] => DateTime Object ( [date] => 2015-12-01 01:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
[4] => DateTime Object ( [date] => 2015-12-31 11:30:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
[3] => DateTime Object ( [date] => 2015-12-04 13:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
[1] => DateTime Object ( [date] => 2015-12-30 07:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
[0] => DateTime Object ( [date] => 2015-12-01 02:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Kolkata ) 
 ) 

我已尝试uasort如下所示,但它没有提供正确的排序。有没有人提前遇到过这个问题?

uasort($item_date_converted, function ($a, $b) { return $a - $b; });

2 个答案:

答案 0 :(得分:1)

您可以在DateTime对象上使用diff()函数:

int i=3;
        while (...) {
            int i=1;
... }

或者您可以按相应的timestamps排序:

uasort($item_date_converted, function ($a, $b) { return $a->diff($b)->days; });

答案 1 :(得分:-1)

可以使用标准比较运算符比较DateTime对象。因此,如果您想使用uasort,您只需要更改比较函数,以便它返回预期值。 PHP documentation of uasort引用了documentation of usort来解释用户定义的比较函数,其中包含:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

所以你的uasort可以像这样完成:

uasort($item_date_converted, function ($a, $b) {
    if ($a < $b) return -1;
    if ($a > $b) return 1;
    return 0;        
});

使用asort而不是uasort可以进一步简化此操作。如果这只是一个DateTime对象数组,则可以在没有用户函数的情况下对其进行排序。就是这么简单:

asort($item_date_converted);