排序数组包含一些日期顺序,如星期日,星期一等在PHP中

时间:2018-03-13 13:06:45

标签: php arrays date

我有一个包含7个日期的数组。

$dates = array(
'2018-03-07', //Wednesday
'2018-03-08', //Thursday
'2018-03-09', //Friday
'2018-03-10', //Saturday
'2018-03-11', //Sunday
'2018-03-12', //Monday
'2018-03-13', //Tuesday
);

我想按天(星期日到星期六)对上面的数组进行排序。

预期的输出是,

 $dates = array(
'2018-03-11', //Sunday
'2018-03-12', //Monday
'2018-03-13', //Tuesday
'2018-03-07', //Wednesday
'2018-03-08', //Thursday
'2018-03-09', //Friday
'2018-03-10', //Saturday
);

如何排序?请帮帮我。

2 个答案:

答案 0 :(得分:4)

您可以使用usort()date('w'),使用“星期几的数字表示法”对数组进行排序

$dates = array(
'2018-03-07', //Wednesday
'2018-03-08', //Thursday
'2018-03-09', //Friday
'2018-03-10', //Saturday
'2018-03-11', //Sunday
'2018-03-12', //Monday
'2018-03-13', //Tuesday
);

usort($dates, function($a, $b) {
    return date('w',strtotime($a)) - date('w',strtotime($b)) ;
});

print_r($dates);

输出:

Array
(
    [0] => 2018-03-11
    [1] => 2018-03-12
    [2] => 2018-03-13
    [3] => 2018-03-07
    [4] => 2018-03-08
    [5] => 2018-03-09
    [6] => 2018-03-10
)

date('w')返回:0(星期日)到6(星期六)。

答案 1 :(得分:0)

usort(array, function($a, $b){
    $dayA = date('w', strtotime($a));
    $dayB = date('w', strtotime($b));

    return $dayA < $dayB ? 1 : $dayA === $dayB ? 0 : -1;
});

这应该像你要求的那样工作