![laugh.gif](http://phpforum.su/html/emoticons/laugh.gif)
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
/**
* Parse range
*
* @param string $start
* @param string $end
* @return array
*/
function parse_range ($start, $end) {
if ($start >= $end) {
return [];
}
$edges = ['', ''];
$start = str_split(strrev($start));
$end = str_split(strrev($end));
foreach ($end as $key => $value) {
if ($start[$key] === '0' && $value === '9') {
continue;
}
$edges[0] = $start[$key] . $edges[0];
$edges[1] = $value . $edges[1];
}
return $edges;
}
/**
* Generate one range
*
* @param array $range
* @return array
*/
function generate_range (array $range) {
list($start, $end) = $range;
if ($start === $end) {
return [(int)$start];
}
$range = [];
$start = str_split($start);
$end = str_split($end);
$prefix = 0;
while (true) {
if (empty($end)) {
break;
}
$start_first = array_shift($start);
$end_first = array_shift($end);
if ($start_first === $end_first) {
$prefix .= $start_first;
}
else {
$range = array_merge($range, range(
$prefix . $start_first,
$prefix . $end_first
));
$prefix .= $end_first;
}
}
return $range;
}
/**
* Generate ranges
*
* @param array $ranges
* @return array
*/
function generate_ranges (array $ranges) {
$result = [];
foreach ($ranges as $value) {
$range = explode('-', $value);
$parsed = parse_range(
current($range),
end($range)
);
$result = array_merge($result, generate_range($parsed));
}
return $result;
}
$ranges = [
'135000-135049',
'1950000-1959999',
'1960000-1969999',
'2170000-2187999'
];
var_dump(generate_ranges($ranges));
array (size=18)
0 => int 13500
1 => int 13500
2 => int 13501
3 => int 13502
4 => int 13503
5 => int 13504
6 => int 195
7 => int 196
8 => int 217
9 => int 218
10 => int 2180
11 => int 2181
12 => int 2182
13 => int 2183
14 => int 2184
15 => int 2185
16 => int 2186
17 => int 2187