如何在PHP中按键对二维数组排序

时间:2019-04-10 09:07:44

标签: php arrays date

我有一个二维数组,形式如下:

$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格式),它的工作方式完全符合我的期望。再次感谢所有贡献者。

4 个答案:

答案 0 :(得分:5)

正如您所说,您使用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或d-m-y格式的日期的歧义   位于各个组件之间的分隔符:如果分隔符是一个   斜线(/),则假定为美国m / d / y;而如果   分隔符是破折号(-)或点(。),然后是欧洲d-m-y格式   假定为。但是,如果年份以两位数格式给出,并且   分隔符是破折号(-,日期字符串被解析为y-m-d。

来源link

Demo

答案 1 :(得分:3)

最好比较时间戳而不是日期字符串

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

usort($my_array, function ($a, $b) {
    return strtotime($a['date']) <=> strtotime($b['date']);
});

print_r($my_array);

演示https://3v4l.org/KGAIk

答案 2 :(得分:1)

如果您将日期格式更改为YYYY / MM / DD,则您的功能应开始正常工作。

答案 3 :(得分:0)

像这样的d-m-Y更改日期格式。 转换您的日期后,您的功能将可以正常使用。

请参见下面的工作代码

    $my_array = array(
    array("date" => "11-04-2019"),
    array("date" => "12-05-2017"),
    array("date" => "13-05-2018"),
    array("date" => "14-05-2016"));
usort(
    $my_array,
    function ($a, $b) {
        return strtotime($a['date']) - strtotime($b['date']);
    });
print_r($my_array);