首页 > 解决方案 > 如何在 PHP 中按键对二维数组进行排序

问题描述

我有一个这种形式的二维数组:

$my_array = array(
    array("date" => "10/04/2019"),
    array("date" => "10/05/2017")
    ...
)

我要做的就是对其进行排序,以使带有日期的数组排10/05/2017在其他数组之前。

我尝试了以下方法:

usort(
    $my_array,
    function($a, $b) {
        return strcmp($a['date'], $b['date']);
    }
    );

它似乎不起作用。

我仍然可以将较晚的日期放在较早的日期之前。

它比我演示的要复杂一些,但我认为这是核心原则。如果我给出的示例有问题,那么这本身就可以解释问题。

编辑- 根据正确答案和其他评论修复。我在比较字符串而不是日期。包装 strtotime 使得比较是在日期之间。我还将日期的格式更改为 Y/m/d(MySQL 格式),它的工作方式完全符合我的预期。再次感谢所有做出贡献的人。

标签: phparraysdate

解决方案


正如您所说,您的d/m/Y格式根据 PHP 文档无效,您需要将其转换为d-m-Y.
您可以比较日期如下,

usort($my_array, function ($a, $b) {
    $aDate = strtotime(str_replace("/", "-", $a['date']));
    $bDate = strtotime(str_replace("/", "-", $b['date']));
    return $aDate - $bDate;
});

注意:m/d/y 或 dmy 格式的日期通过查看 各个组件之间的分隔符来消除歧义:如果分隔符是 斜杠 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),则 假定为欧洲 dmy 格式。但是,如果年份以两位数格式给出并且 分隔符是破折号(-,则日期字符串被解析为 ymd.

链接

演示


推荐阅读