簡體   English   中英

在PHP中對usort排序類似的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM