php - 以日期为键的排序数组

2022-08-30 22:46:27

嗨,我有一个数组,其中的键作为这种格式的日期。

$arr = array(

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

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


答案 1

使用该格式的日期,按字母顺序进行比较将正常工作。使用 PHP 函数 ksort

ksort($arr);

答案 2

一个稍微复杂的解决方案,仍然适用于几乎任何日期格式,是基于uksort函数的

首先,我们定义一个比较两个日期的回调函数(比较器):

function compare_date_keys($dt1, $dt2) {
    return strtotime($dt1) - strtotime($dt2);
}

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

uksort($arr, "compare_date_keys");

因此,该函数会将键视为日期,并按升序对数组进行排序(首先是较新的)。

请注意,我们可以轻松调整比较器以支持不同的用例。例如,按日期降序排序(最新的先)可以通过简单地将函数的返回表达式替换为以下内容来完成:

return strtotime($dt2) - strtotime($dt1);