У меня есть массив:
'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;
}
Спасибо всем за помощь и много драгоценностей плюсы, которые побудили меня действовать самостоятельно.