按 Ymd 格式的键对数组进行排序,不带分隔符

发布于 2024-11-30 17:51:02 字数 301 浏览 0 评论 0 原文

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

$arr = array(

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

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

I have an array with keys as date in this format.

$arr = array(

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

How can I sort this array by key?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

说好的呢 2024-12-07 17:51:02

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

ksort($arr);

With the dates in that format, an alphabetical comparison will work just fine. Use the PHP function ksort.

ksort($arr);
因为看清所以看轻 2024-12-07 17:51:02

稍微复杂一点的解决方案基于 适用于几乎所有日期格式 ="noreferrer">uksort 函数。

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

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

首先 我们可以使用刚刚定义的函数作为 uksort 中的第二个参数,如下例所示:

uksort($arr, "compare_date_keys");

因此,该函数会将键视为日期并按升序对数组进行排序(最近的在前)。

请注意,我们可以轻松调整比较器以支持不同的用例。例如,只需将函数的返回表达式替换为以下内容即可完成按日期降序排序(最近的在前):

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

A slightly more complex solution, which nonetheless works for almost any date format, is based on the uksort function.

First we define a callback function that compares two dates (comparator):

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

Now we can use the just defined function as the second parameter in uksort, as in the example below:

uksort($arr, "compare_date_keys");

As a result the function will treat the key as a date and sort the array in ascending order (less recent first).

Note that we can easily tweak the comparator to support different use cases. For example, sorting by date descending (most recent first) can be accomplished by simply replacing the function's return expression with the following:

return strtotime($dt2) - strtotime($dt1);
孤寂小茶 2024-12-07 17:51:02

只需这一行代码:

ksort($arr);

Just this single line of code:

ksort($arr);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文