【问题标题】:Sort an array contains some dates by days order like sunday, monday etc. in php对包含某些日期的数组进行排序,如 php 中的星期日、星期一等
【发布时间】:2018-03-13 13:06:44
【问题描述】:

我有一个包含 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
);

如何排序?请帮帮我。

【问题讨论】:

    标签: php arrays date


    【解决方案1】:

    您可以使用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(星期六)。

    【讨论】:

    • 排序回调应返回值 0;不是truefalse
    • @Arya 不客气。请务必使用 - 而不是 < 的最新版本,正如 deceze 所指出的那样。
    【解决方案2】:
    usort(array, function($a, $b){
        $dayA = date('w', strtotime($a));
        $dayB = date('w', strtotime($b));
    
        return $dayA < $dayB ? 1 : $dayA === $dayB ? 0 : -1;
    });
    

    这应该按照你的要求工作

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多