对格式为 d/m/Y 的日期数组进行排序

问题描述 投票:0回答:2

我在 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;
}
php arrays sorting date
2个回答
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',
)

0
投票

如果您使用 ISO 日期(例如,

2013-10-10
2014-12-31
),您只需要一个
asort()

© www.soinside.com 2019 - 2024. All rights reserved.