2015-12-28 38 views
0

這可能是一個簡單的,但我一直在努力獲得輸出排序正確的數組。 我想按日期時間值按升序對以下數組進行排序。php-錯誤排序數組與時間戳作爲值

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; });

回答

-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); 
+0

我已經嘗試過,它工作在一個非常簡單的方式,謝謝 – krishna89

1

可以使用diff()功能上datetime對象:

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

或者您也可以通過相應的timestamps排序:

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