我必须对PHP上的一些日期进行排序,其中一些日期在月份或日期上可能是'0',例如:
1951-11-00
1951-12-14
问题是,这些日期不能与具有所有年、日和月值的其他日期排序。
首先我尝试使用array_multisort:
foreach ($Objects as $key => $part) {
$sort[$key] = strtotime($part['Object']['date']);
}
array_multisort($sort, SORT_DESC, $Objects );
它可以进行排序,但它首先对月份或日期中有00的值进行排序,然后对正常日期进行排序,例如:
1937-05-00
1937-04-00
1935-11-00
1951-12-16
1951-12-14
如您所见,顺序不对,因为带有1951的日期应该排在前面,但是排序算法将日期分为两组,一组包含00,另一组包含完整的数字。
然后我试着排序,但是我没有得到好的结果。
我怎样才能正确排序这些日期?对于我所放置的列表,我需要它按照这个顺序显示(不管月份是否在00):
1951-12-16
1951-12-14
1937-05-00
1937-04-00
1935-11-00
按字符串排序。当将它们作为字符串进行比较时,它们已经处于可比的格式。
$dates = [
'1937-05-00',
'1937-04-00',
'1935-11-00',
'1951-12-16',
'1951-12-14'
];
usort($dates, function($a, $b) {
return $a < $b;
});
var_export($dates);
演示