用PHP

2013-05-09 42 views
0

无法排序日期我有一个PHP数组,看起来像这样:用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($日期)这不是正确的对它们进行排序。有没有一种方法来排序这样的键?

我期望的那种返回:

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

你尝试用'标志SORT_STRING'?像'ksort($日期,SORT_STRING);' – MISJHA 2013-05-09 15:14:15

回答

9

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

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

yyyy-mm-dd 
+3

许多upvotes。 – Kermit 2013-05-09 15:13:32

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

转换为unix时间戳可以帮助,因为它仅仅是一个数字(整数),可以很容易进行排序。

0

ksort默认排序键入SORT_REGULAR

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

和日期的格式将在PHP评估为一般串。

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

0

你能给我们uksort但在比较函数是这样的:

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

uksort($dates, "sort_func");