我的数组:
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
)
)
您可以将usort
与strtotime
结合使用以使日期成为数值。
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
。