Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中对usort中的类似结果进行排序_Php_Arrays_Sorting - Fatal编程技术网

在PHP中对usort中的类似结果进行排序

在PHP中对usort中的类似结果进行排序,php,arrays,sorting,Php,Arrays,Sorting,我知道这段代码是按最新开始时间对活动数组进行排序的,并且只显示循环中最先出现的具有相同日期的活动 foreach ($activity_array AS $k => $v): ...... usort($v['activity'], function ($a, $b) { $ad = new DateTime($a['start']); $bd = new DateTime($b['start']); if ($ad == $bd) { return 0; } return $ad &l

我知道这段代码是按最新开始时间对活动数组进行排序的,并且只显示循环中最先出现的具有相同日期的活动

foreach ($activity_array AS $k => $v):
......

usort($v['activity'], function ($a, $b) {
$ad = new DateTime($a['start']);
$bd = new DateTime($b['start']);
if ($ad == $bd) {
return 0;
}
return $ad < $bd ? -1 : 1;
});
如:

|  Activity  |  Start         |   Venue   |
+------------+----------------+-----------+
| Activity A | 22/10/17 08.30 | Floor 1   |
| Activity X | 22/10/17 09.30 | Floor 2   |
| Activity B | 22/10/17 10.30 | Hall 1    |
| Activity C | 22/10/17 10.30 | Hall 2    |
| Activity D | 22/10/17 10.30 | Hall 3    |

当开始时间相同时,您可以再次检查场地

foreach ($activity_array AS $k => $v):
......

usort($v['activity'], function ($a, $b) {
$ad = new DateTime($a['start']);
$bd = new DateTime($b['start']);
if ($ad == $bd) {

    $venue1 = $a['venue'];
    $venue2 = $b['venue'];
    return strcmp($venue1, $venue2);
}
return $ad < $bd ? -1 : 1;
});
foreach($k=>v的活动数组):
......
usort($v['activity'],函数($a,$b){
$ad=新日期时间($a['start']);
$bd=新日期时间($b['start']);
如果($ad=$bd){
$venue1=$a[‘场地’];
$venue2=$b[‘场地’];
返回strcmp($venue1,$venue2);
}
返回$ad<$bd?-1:1;
});

这是您的解决方案

$array = array(
        array('activity' => 'Activity A', 'start' => '22/10/17 08.30', 'venue' => 'Floor 1'),
        array('activity' => 'Activity D', 'start' => '22/10/17 10.30', 'venue' => 'Hall 3'),
        array('activity' => 'Activity B', 'start' => '22/10/17 10.30', 'venue' => 'Hall 1'),
        array('activity' => 'Activity C', 'start' => '22/10/17 10.30', 'venue' => 'Hall 2'),
        array('activity' => 'Activity X', 'start' => '22/10/17 09.30', 'venue' => 'Floor 2')
);  //Your Array
usort($array,"cmp");
function cmp($a, $b){
    if ($a["venue"] == $b["venue"]) {
        return 0;
    }
    return ($a["venue"] < $b["venue"]) ? -1 : 1;
}

($venue1-$venue2);==第一层-第二层
我认为这不会产生任何结果谢谢@B.Desai,我不知道这个函数存在。问题很好。+1
$array = array(
        array('activity' => 'Activity A', 'start' => '22/10/17 08.30', 'venue' => 'Floor 1'),
        array('activity' => 'Activity D', 'start' => '22/10/17 10.30', 'venue' => 'Hall 3'),
        array('activity' => 'Activity B', 'start' => '22/10/17 10.30', 'venue' => 'Hall 1'),
        array('activity' => 'Activity C', 'start' => '22/10/17 10.30', 'venue' => 'Hall 2'),
        array('activity' => 'Activity X', 'start' => '22/10/17 09.30', 'venue' => 'Floor 2')
);  //Your Array
usort($array,"cmp");
function cmp($a, $b){
    if ($a["venue"] == $b["venue"]) {
        return 0;
    }
    return ($a["venue"] < $b["venue"]) ? -1 : 1;
}
Array
(
[0] => Array
    (
        [activity] => Activity A
        [start] => 22/10/17 08.30
        [venue] => Floor 1
    )

[1] => Array
    (
        [activity] => Activity X
        [start] => 22/10/17 09.30
        [venue] => Floor 2
    )

[2] => Array
    (
        [activity] => Activity B
        [start] => 22/10/17 10.30
        [venue] => Hall 1
    )

[3] => Array
    (
        [activity] => Activity C
        [start] => 22/10/17 10.30
        [venue] => Hall 2
    )

[4] => Array
    (
        [activity] => Activity D
        [start] => 22/10/17 10.30
        [venue] => Hall 3
    )

)