无法使用PHP对日期进行排序

时间:2013-05-09 15:11:27

标签: php sorting

我有一个如下所示的PHP数组:

$dates = array();
$dates['01-07-2013'] = 'dummy data';
$dates['01-21-2013'] = 'dummy data';
$dates['01-28-2013'] = 'dummy data';
$dates['01-20-2012'] = 'dummy data';

使用 ksort($ dates)时,它没有正确排序。有没有办法对这样的键进行排序?

我希望这种回归:

'01-30-2012',
'01-07-2013',
'01-21-2013',
'01-28-2013',

4 个答案:

答案 0 :(得分:9)

就PHP而言,这些不是日期。它们是字符串,所以它正在应用标准的字符串排序规则。

您需要定义与usort()一起使用的自定义排序函数,或将这些日期转换为可作为字符串排序的格式,例如

yyyy-mm-dd

答案 1 :(得分:0)

$dates = array();
$dates[time()] = 'dummy data';

转换为unix时间戳可能会有所帮助,因为它只是一个可以轻松排序的数字(整数)。

答案 2 :(得分:0)

ksort默认排序类型为SORT_REGULAR

  

SORT_REGULAR - 正常比较项目(不要更改类型)

并且您的日期格式将在PHP中评估为通用字符串。

您需要对这些进行格式化,以便将它们排序为字符串。

答案 3 :(得分:0)

你可以我们uksort但在比较函数中看起来像这样:

function sort_func($date1, $date2){
    return strtotime(str_replace("-","/", $date1)) - strtotime(str_replace("-","/", $date2));
}

uksort($dates, "sort_func");