- var_dump: documentation ( source)
- array_merge: documentation ( source)
- preg_split: documentation ( source)
- range: documentation ( source)
<?php
function parse_range_str($str_input)
{
$arr_result = [];
foreach (preg_split('/\s*,\s*/', $str_input) as $str_range) {
$arr_range = preg_split('/\s*-\s*/', $str_range);
if (isset($arr_range[1])) {
$arr_result = array_merge($arr_result, range((int) $arr_range[0], (int) $arr_range[1]));
} else {
$arr_result[] = (int) $arr_range[0];
}
}
return $arr_result;
}
var_dump(parse_range_str('1,2,8-12,16'));