2011-08-19 152 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