按日期字段对对象数组进行排序

Nad*_*ine 17 php arrays sorting

如何重新排列这样的对象数组:

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

通过date关键,最古老的第一?

Arn*_*anc 34

usort($array, function($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});
Run Code Online (Sandbox Code Playgroud)

或者如果您没有PHP 5.3:

function cb($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
}
usort($array, 'cb');
Run Code Online (Sandbox Code Playgroud)

  • 看起来很好,我建议OP在数据库中进行日期/时间排序,和/或返回一个简单的unix时间戳以及格式化的值,因为strtotime()具有CONSIDERABLE开销并且会使重复排序非常昂贵. (3认同)
  • 然后用`uasort`替换`usort` (2认同)

小智 16

由于最初的问题是关于对stdClass()对象的数组进行排序,这里的代码如果$ a和$ b是对象的话会起作用:

usort($array, function($a, $b) {
    return strtotime($a->date) - strtotime($b->date);
});
Run Code Online (Sandbox Code Playgroud)

或者如果您没有PHP 5.3:

function cb($a, $b) {
    return strtotime($a->date) - strtotime($b->date);
}
usort($array, 'cb');
Run Code Online (Sandbox Code Playgroud)