php - 以日期为键排序数组

时间:2011-08-20 21:22:09

标签: php arrays sorting

嗨我有一个数组,其中包含以此格式显示日期的键。

$arr = array(

    "20110805" => "2",
    "20100703" => "5",
    "20110413" => "3",
    "20100805" => "4",
    "20100728" => "6",
    "20090416" => "7",
    "20080424" => "8",
    "20110819" => "1",  
);

如何按键对此数组进行排序。谢谢。

3 个答案:

答案 0 :(得分:23)

使用该格式的日期,按字母顺序进行比较就可以了。使用PHP函数ksort

ksort($arr);

答案 1 :(得分:4)

只需这一行代码:

ksort($arr);

答案 2 :(得分:1)

一个稍微复杂的解决方案,它基于uksort函数,几乎可以用于任何日期格式

首先,我们定义一个callback function来比较两个日期(比较器):

function compare_date_keys($dt1, $dt2) {
    $tm1 = strtotime($dt1);
    $tm2 = strtotime($dt2);
    return ($tm1 < $tm2) ? -1 : (($tm1 > $tm2) ? 1 : 0);
}

现在,我们可以将刚刚定义的函数用作uksort中的第二个参数,如下例所示:

uksort($arr, "compare_date_keys");

因此,该函数会将键视为日期,并以升序对数组进行排序(从新到旧)。

请注意,我们可以轻松调整比较器以支持不同的用例。例如,只需按以下顺序替换函数的return表达式,即可完成按日期降序排序(从最新到第一个):

return ($tm1 < $tm2) ? 1 : (($tm1 > $tm2) ? -1 : 0);