[英]Sorting similar result in usort in PHP
我知道这段代码将按最晚开始时间对活动数组进行排序,并且还仅显示循环中第一个具有相同日期的活动。
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 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 |
像是:
| 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;
});
这是您的解决方案。
$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
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.