PHP получает массив чисел из строки с диапазоном
для моего текущего проекта мне нужен пользователь, чтобы определить диапазон чисел, которые хранятся в базе данных.
следующая строка является возможным вводом пользователем:
1025-1027,1030,1032-1034
Я хочу обработать эту строку с помощью php, чтобы получить массив возможных чисел, включая возможность добавления диапазона чисел с n-n²
или добавление одиночных чисел, разделенных n; n²
который для этого примера будет:
1025 1026 1027 1030 1032 1031 1034
2 ответов
разделить входную строку на запятую, а затем посмотреть, что каждый элемент нового массива. Если он имеет разделитель диапазона (-
), добавьте каждое число из диапазона в массив:
$input = '1025-1027,1030,1032-1034';
$inputArray = explode(',', $input);
$outputArray = array();
foreach($inputArray as $v) {
if(strpos($v, '-') === false) {
$outputArray[] = $v;
} else {
$minMax = explode('-',$v);
if($minMax[0]<=$minMax[1]) {
$outputArray = array_merge($outputArray, range($minMax[0], $minMax[1]));
}
}
}
print_r($outputArray);
В конце концов возвращается значение
Array
(
[0] => 1025
[1] => 1026
[2] => 1027
[3] => 1030
[4] => 1032
[5] => 1033
[6] => 1034
)
другой способ / вариант будет explode
и ,
и -
, затем сопоставьте каждую взорванную группу, затем используйте range
, после того, как диапазоны были созданы, повторно создайте группировку:
$input = '1025-1027,1030,1032-1034';
// explode, map, explode, create range
$numbers = array_map(function($e){
$range = explode('-', $e);
return (count($range) > 1) ? range(min($range), max($range)) : $range;
}, explode(',', $input));
// re merge
$numbers = call_user_func_array('array_merge', $numbers);
print_r($numbers);