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