这可能是一个简单的,但我一直在努力为数组正确排序输出。 我想按日期时间值按升序对以下数组进行排序。
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; });
答案 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);