按没有分隔字符的Ymd格式键对数组进行排序


Sort array by keys which are in Ymd format with no delimiting characters

我有一个以键为日期的数组,格式为:

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

如何按键对数组进行排序?

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

ksort($arr);

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

首先定义一个回调函数来比较两个日期(comparator):

function compare_date_keys($dt1, $dt2) {
    return strtotime($dt1) - strtotime($dt2);
}
现在我们可以使用刚刚定义的函数作为uksort的第二个参数,如下例所示:
uksort($arr, "compare_date_keys");

因此,函数将键作为日期处理,并按升序对数组进行排序(较近期的优先)。

注意,我们可以很容易地调整比较器来支持不同的用例。例如,按日期降序排序(最近的在前)可以通过简单地用以下语句替换函数的返回表达式来实现:

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

就这一行代码:

ksort($arr);