我必须在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和具有完整数字的日期。 / p>
然后我尝试了uasort,但我没有取得好成绩。
如何正确排序这些日期?对于我放的列表,我需要它显示在此订单上(无论月份是00):
1951年12月16日
1951年12月14日
1937-05-00
1937-04-00
1935-11-00
答案 0 :(得分:4)
只需将它们排序为字符串即可。当作为字符串进行比较时,它们的格式已经相似。
$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);