Php 如何按范围按时间顺序排列数字列表和分组结果

Php 如何按范围按时间顺序排列数字列表和分组结果,php,arrays,sorting,Php,Arrays,Sorting,以下面的清单为例: 445 446 661 662 1978 1979 2014 2015 2016 2017 2018 2019 2020 2021 2021 2022 2673 2674 什么是对该列表进行排序的最佳方法,以便最终得到按时间顺序对列表中的所有数字范围进行分组的结果 例如,想要的结果是5个数组: [445, 446] [661, 662] [1978, 1979] [2014 ... 2022] [2673, 2674] 试试这个: $array = array(

以下面的清单为例:

445
446
661
662
1978
1979
2014
2015
2016
2017
2018
2019
2020
2021
2021
2022
2673
2674
什么是对该列表进行排序的最佳方法,以便最终得到按时间顺序对列表中的所有数字范围进行分组的结果

例如,想要的结果是5个数组:

[445, 446]
[661, 662]
[1978, 1979]
[2014 ... 2022]
[2673, 2674]
试试这个:

$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);
注意:


数组中有两个2021值。也许您可以使用
array\u unique
仅获取唯一值。

只需添加
sort($array)您的函数仅适用于ordered arrayBeautiful,工作完美;)是的,最后一个阵列会有所有独特的Entries欢迎你。我希望您可以使用
array\u unique
sort
函数。
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