2014-12-03 58 views
0

按時間順序結果需要以下列表:如何排序號的列表和group by範圍

445 
446 
661 
662 
1978 
1979 
2014 
2015 
2016 
2017 
2018 
2019 
2020 
2021 
2021 
2022 
2673 
2674 

是什麼使你最終的結果排序這個名單,最好的方法組織了所有的編號範圍按時間順序在列表中找到?

E.g,希望結果會是5個陣列:

[445, 446] 
[661, 662] 
[1978, 1979] 
[2014 ... 2022] 
[2673, 2674] 

回答

1

試試這個:

$array = array(
    445,446,661,662,1978,1979,2014,2015,2016,2017,2018,2019,2020,2021, 
    2021,2022,2673,2674 
); 

$result = array(); 
$tmp = array(); 
for ($i = 0; $i < count($array); $i++) { 
    if (array_key_exists($i + 1, $array) && ($array[$i + 1]) - $array[$i] == 1) { 
     $tmp[] = $array[$i]; 
    } else { 
     $tmp[] = $array[$i]; 
     $result[] = $tmp; 
     $tmp = array(); 
    } 
} 
var_dump($result); 

輸出:

array 
    0 => 
    array 
     0 => int 445 
     1 => int 446 
    1 => 
    array 
     0 => int 661 
     1 => int 662 
    2 => 
    array 
     0 => int 1978 
     1 => int 1979 
    3 => 
    array 
     0 => int 2014 
     1 => int 2015 
     2 => int 2016 
     3 => int 2017 
     4 => int 2018 
     5 => int 2019 
     6 => int 2020 
     7 => int 2021 
    4 => 
    array 
     0 => int 2021 
     1 => int 2022 
    5 => 
    array 
     0 => int 2673 
     1 => int 2674 

注:

陣列中有兩個2021值。也許你可以使用array_unique來獲得唯一的值。

+0

只需添加'sort($ array);'你的函數只能使用有序數組 – 2014-12-03 12:11:34

+0

美麗,完美無缺;而且最終數組會有所有獨特的條目 – subZero 2014-12-03 12:43:44

+1

不客氣。我希望你可以使用'array_unique'和'sort'函數。 – vaso123 2014-12-03 13:30:47