Генерация последовательных лет диапазонов из массива лет в PHP - PullRequest
0 голосов
/ 29 мая 2020

У меня есть массив:

'years' => 
array (size=28)
  0 => string '1985'
  1 => string '1986'
  2 => string '1987'
  3 => string '1988'
  4 => string '1989'
  5 => string '1990'
  6 => string '1991'
  7 => string '1992'
  8 => string '1993'
  9 => string '1994'
  10 => string '1996'
  11 => string '1997'
  12 => string '1998'
  13 => string '1999'
  14 => string '2000'
  15 => string '2001'
  16 => string '2002'
  17 => string '2005'
  18 => string '2008'
  19 => string '2011'
  20 => string '2012'
  21 => string '2013'
  22 => string '2014'
  23 => string '2015'
  24 => string '2016'
  25 => string '2017'
  26 => string '2019'
  27 => string '2020'

Каков самый быстрый способ сгенерировать диапазоны последовательных лет из этого массива? Моя цель - выполнить sh именно этот массив:

array(
0 => '1985-1994',
1 => '1996-2002',
2 => '2005',
3 => '2008',
4 => '2011-2017',
5 => '2019-2020'
);

У 2005 и 2008 годов нет последовательных лет, поэтому они вставляются отдельно. Список массивов лет, конечно, может быть разным.

Если кому-то понадобится решение такой проблемы, есть готовый код ниже.

$range_started = 0;
$ranges = [];
$last_year = end($years);

foreach($years as $year) {
    if (!$range_started) {
        $range_started = $year;
        $next_expected = $year+1;

        continue;
    }

    if ($year == $next_expected) {
        $next_expected++;

        if ($year < $last_year)
            continue;
    }

    $ne = $next_expected-1;

    if ($range_started < $ne)
        $ranges[] = $range_started . '-' . $ne;
    else
        $ranges[] = $range_started;

    $range_started = $year;
    $next_expected = $year+1;
}

Спасибо всем за помощь и много драгоценностей плюсы, которые побудили меня действовать самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...