2011-08-19 154 views
11

我如何重新安排對象的這樣一個數組:排序對象數組按日期場

[495] => stdClass Object 
     (
     [date] => 2009-10-31 18:24:09 
     ... 
     ) 
[582] => stdClass Object 
     (
     [date] => 2010-2-11 12:01:42 
     ... 
     ) 
... 

date關鍵,第一最古老的?

回答

24
usort($array, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 

或者,如果你不具備PHP 5.3:

function cb($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
} 
usort($array, 'cb'); 
+3

看起來不錯,我建議你到OP做的日期/時間在數據庫中的排序,和/或格式化的值一起返回一個普通的UNIX時間戳,爲的strtotime()有可以考慮的開銷,並且會重複排序xpensive。 –

+0

嗯..但它不保留舊的數字鍵.. – Nadine

+2

用'uasort'替換'usort'然後 – arnaud576875

2

我想對arnaud576875的答案擴大。我遇到了同樣的問題,但是使用了DateTime對象。這就是我能夠完成同樣的事情。

usort($array, function($a, $b) { 
    return $a['date']->format('U') - $b['date']->format('U'); 
}); 
11

由於原來的問題是關於排序stdClass的數組()的對象,這裏如果$ a和$ b是對象,其將工作代碼:

usort($array, function($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
}); 

或者,如果你沒有PHP 5.3:

function cb($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
} 
usort($array, 'cb'); 
+2

這應該是正確的答案。 – devXen