我有一个如下所示的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',
答案 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");