我在 PHP 中有一个关联数组,其中键是字符串,值是日期。
示例
"fileid" => "10/10/2013".
我希望能够按最近的日期对它们进行排序。
我不知道该怎么做,感谢任何帮助,谢谢。
编辑:
我现在已经使用了usort函数。
但是我的输出如下:
02/09/2013
03/09/2013
03/10/2013
04/07/2013
04/09/2013
09/09/2013
11/09/2013
13/06/2013
13/08/2013
它仅按前两个数字排序,我希望它对完整日期进行排序,我做错了什么?
这是我的代码:
usort($filesWithDates,"my_sort");
foreach ($filesWithDates as &$value) {
echo $value."<br/>";
}
function my_sort($a,$b)
{
if ($a==$b) return 0;
return ($a<$b)?-1:1;
}
您的日期不适合作为字符串进行比较,因为它们不是降序单位格式 (
Y-m-d
)。
因此,您需要将字符串解析为可以轻松排序的值(大端格式)。
要减少函数调用总数,请使用
array_multisort()
而不是 usort()
。
代码:(演示)
$array = [
'02/09/2013',
'03/09/2013',
'03/10/2013',
'04/07/2013',
'04/09/2013',
'09/09/2013',
'11/09/2013',
'13/06/2013',
'13/08/2013',
];
array_multisort(
array_map(fn($v) => date_create_from_format('d/m/Y', $v), $array),
$array
);
var_export($array);
输出:
array (
0 => '13/06/2013',
1 => '04/07/2013',
2 => '13/08/2013',
3 => '02/09/2013',
4 => '03/09/2013',
5 => '04/09/2013',
6 => '09/09/2013',
7 => '11/09/2013',
8 => '03/10/2013',
)
如果您使用 ISO 日期(例如,
2013-10-10
或 2014-12-31
),您只需要一个 asort()