【问题标题】:Sorting a Multidimensional array by day using usort not working in PHP使用 usort 按天对多维数组进行排序在 PHP 中不起作用
【发布时间】:2016-03-15 13:55:16
【问题描述】:

这是我想按工作日排序的数组(周一到周日) 我检查了类似的问题,但没有一个有助于解决这个问题。

$data = 
     array (
          0 => 
          array (
            'mid' => 19,
            'centerid' => 1,
            'sid' => 13,
            'weekday' => 'tuesday',
            'break' => 1,
          ),
          1 => 
          array (
            'mid' => 14,
            'centerid' => 1,
            'sid' => 13,
            'weekday' => 'wednesday',
            'break' => 1,
          ),
          2 => 
          array (
            'mid' => 12,
            'centerid' => 1,
            'sid' => 13,
            'weekday' => 'monday',
            'break' => 1,
          ),
          3 => 
          array (
            'mid' => 17,
            'centerid' => 1,
            'sid' => 13,
            'weekday' => 'monday',
            'break' => 0,
          ),
        );

usort($data, array($this,'cmp'));

我已经尝试过使用 usort 对其进行排序

function cmp($a, $b){

    $a = strtotime($a['weekday']);
    $b = strtotime($b['weekday']);

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

但它不工作并且是无序的。有人可以帮我吗?

【问题讨论】:

  • 这就是你想要的吗? eval.in/536794
  • 我想按工作日对这个数组进行排序。

标签: php arrays sorting multidimensional-array


【解决方案1】:

试试这个cmp函数

function cmp($a, $b){
    $a = date('N', strtotime($a['weekday']));
    $b = date('N', strtotime($b['weekday']));

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

【讨论】:

    【解决方案2】:

    您可以编写将日期名称映射为数字的函数并在cmp 函数中使用:

    <?php
    $data = 
         array (
              0 => 
              array (
                'mid' => 19,
                'centerid' => 1,
                'sid' => 13,
                'weekday' => 'tuesday',
                'break' => 1,
              ),
              1 => 
              array (
                'mid' => 14,
                'centerid' => 1,
                'sid' => 13,
                'weekday' => 'wednesday',
                'break' => 1,
              ),
              2 => 
              array (
                'mid' => 12,
                'centerid' => 1,
                'sid' => 13,
                'weekday' => 'monday',
                'break' => 1,
              ),
              3 => 
              array (
                'mid' => 17,
                'centerid' => 1,
                'sid' => 13,
                'weekday' => 'monday',
                'break' => 0,
              ),
            );
    
    usort($data, array($this,'cmp'));
    
    function getNumberOfDayByDayName($dayName)
    {
        $map = array(
            'monday'=>1,
            'tuesday'=>2,
            'wednesday'=>3,
            'thursday'=>4,
            'friday'=>5,
            'saturday'=>6,
            'sunday'=>7,
        );
    
        return $map[$dayName];
    }
    
    function cmp($a, $b){
    
        $a = getNumberOfDayByDayName($a['weekday']);
        $b = getNumberOfDayByDayName($b['weekday']);
    
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    

    结果是:

    Array
    (
        [0] => Array
            (
                [mid] => 17
                [centerid] => 1
                [sid] => 13
                [weekday] => monday
                [break] => 0
            )
    
        [1] => Array
            (
                [mid] => 12
                [centerid] => 1
                [sid] => 13
                [weekday] => monday
                [break] => 1
            )
    
        [2] => Array
            (
                [mid] => 19
                [centerid] => 1
                [sid] => 13
                [weekday] => tuesday
                [break] => 1
            )
    
        [3] => Array
            (
                [mid] => 14
                [centerid] => 1
                [sid] => 13
                [weekday] => wednesday
                [break] => 1
            )
    
    )
    

    工作示例:CLICK

    【讨论】:

    • 我的解决方案也有效 :) 但是@brevis 给出的解决方案更好,做得好@brevis!
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2018-02-01
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多