根据php中的日期字段排序数组[关闭]

问题描述 投票:-1回答:2

我的数组:

Array
(
    [0] => Array
         (
            [IS_EVENT] => 1
            [NAME] => Childrens day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-04
        )

    [1] => Array
         (
            [IS_EVENT] => 1
            [NAME] => Teachers Day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-03
        )


    [2] => Array
        (
            [IS_EVENT] => 0
            [REASON] => Sunday day Jolly Day
            [DATE] => 2020-02-02
        )
)

期望数组:

Array
(
    [0] => Array
          (
            [IS_EVENT] => 0
            [REASON] => Sunday day Jolly Day
            [DATE] => 2020-02-02
        )

    [1] => Array
         (
            [IS_EVENT] => 1
            [NAME] => Teachers Day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-03
        )


    [2] => Array
       (
            [IS_EVENT] => 1
            [NAME] => Childrens day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-04
        )
)
php
2个回答
-1
投票

您可以将简单的usort()与飞船运算符<=>结合使用:

@usort($p,function($a,$b){ 
    return ($a['date'] <=> $b['date']) ? ($a['date'] <=> $b['date']) : ($a['end_date'] <=> $b['end_date']);
});

Demo

编辑

添加了end_date之间的比较

编辑

@的使用不使用很多无用的代码。


-2
投票

您可以将usortstrtotime结合使用以使日期成为数值。

usort($dates, function($a, $b) {
    return ($a['DATE'] === $b['DATE'] ? (isset($a['END_DATE']) ? strtotime($a['END_DATE']) : 0) <=> (isset($b['END_DATE']) ? strtotime($b['END_DATE']) : 0) : strtotime($a['DATE']) <=> strtotime($b['DATE']));
});

结果:

Array
(
    [0] => Array
        (
            [IS_EVENT] => 0
            [REASON] => Sunday day Jolly Day
            [DATE] => 2020-02-02
        )

    [1] => Array
        (
            [IS_EVENT] => 1
            [NAME] => Teachers Day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-03
        )

    [2] => Array
        (
            [IS_EVENT] => 1
            [NAME] => Childrens day
            [DATE] => 2020-03-03
            [END_DATE] => 2020-03-04
        )

)

编辑:如果日期始终为YYYY-MM-DD格式,则无需使用strtotime就可以使用。但是,如果您突然有其他格式,例如DD.MM.YYYY,则必须使用strtotime

© www.soinside.com 2019 - 2024. All rights reserved.