Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按日期字段对对象数组排序_Php_Arrays_Sorting - Fatal编程技术网

Php 按日期字段对对象数组排序

Php 按日期字段对对象数组排序,php,arrays,sorting,Php,Arrays,Sorting,如何重新排列如下所示的对象阵列: [495] => stdClass Object ( [date] => 2009-10-31 18:24:09 ... ) [582] => stdClass Object ( [date] => 2010-2-11 12:01:42 ... ) ... 按日期键,最早的优先 usort($ar

如何重新排列如下所示的对象阵列:

 [495] => stdClass Object
        (
         [date] => 2009-10-31 18:24:09
         ...
        )
 [582] => stdClass Object
        (
         [date] => 2010-2-11 12:01:42
         ...
        )
 ...
日期
键,最早的优先

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');
function cb($a, $b) {
    return strtotime($a->date) - strtotime($b->date);
}
usort($array, 'cb');

我想进一步介绍arnaud576875的答案。我遇到了同样的问题,但是使用了对象。这就是为什么我能够完成同样的事情

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

由于最初的问题是关于对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');
function cb($a, $b) {
    return strtotime($a->date) - strtotime($b->date);
}
usort($array, 'cb');

我想扩展arnaud576875和Michael Irigoyen

Symphony中包含dateTime的对象也存在同样的问题

我不能使用$a['date'],因为它不是一个键数组

usort($verifications, function($a, $b) {
   return $a->getDate()->format('U') - $b->getDate()->format('U');
});
这解决了我的问题

因为您的月份(可能还有您的日期)值不是零填充的,您无法立即将日期作为简单字符串进行比较。您应该使用
strotime()
将日期转换为unix时间整数——这些整数适合进行可靠的比较

此外,不要丢失第一级关键点与其对象之间的关联关系似乎也很重要。要对键进行排序和保留,请调用
uasort()
。在现代php中,spaceship操作符是用于进行三方比较的go-to实用程序(返回-1、0或1)

代码:

这是


对于正在排序日期、时间或日期时间值的任何人,这些值可以自然地作为基本字符串进行比较(例如
Y-m-d H:i:s
H:i
m/d
Y-m-d
,等等,然后看。

看起来不错,我建议OP在数据库中进行日期/时间排序,和/或返回一个普通的unix时间戳以及格式化值,如strotime()使用
uasort
替换
usort
,那么你是在对字符串值调用
format()
方法吗?这个答案让研究人员感到误导。OP的样本数据是一个对象数组,而不是数组数组。
array_multisort(
    array_map('strtotime', array_column($array, 'date')),
    $array
);