3v4l.org

run code in 300+ PHP versions simultaneously
<?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'));

preferences:
36.68 ms | 402 KiB | 5 Q