繁体   English   中英

使用usort按天对多维数组进行排序在PHP中不起作用

[英]Sorting a Multidimensional array by day using usort not working in 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'));

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

function cmp($a, $b){

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

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 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;
}

您可以编写将日期名称映射为数字并在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM