简体   繁体   English

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

[英]Sorting similar result in usort in PHP

I understand that this code is sorting up activity array the by latest start time and also just display which any activity that come first in the loop that have same date. 我知道这段代码将按最晚开始时间对活动数组进行排序,并且还仅显示循环中第一个具有相同日期的活动。

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;
});

How can i sort it if the start time is the same, but got another venue variable that needed to be sort within the same activity. 如果开始时间相同,但又如何在同一活动中进行排序,该如何对它进行排序呢?

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

to be like: 像是:

|  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    |

You can check again for venue when start time is same 您可以在开始时间相同时再次检查场地

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;
});

Here is your solution.... 这是您的解决方案。

$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;
}

Result 结果

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
    )

)

Duplicate 重复

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

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