рассчитать разницу между двумя числами

я хотел бы рассчитать различия между двумя заданными числами, например:
1 – 5 или 24 – 35

Мне нужно отделить числа в массивах и написать различия между ними, например:
1 2 3 4 5 или 24 25 26 27 28 29 30 31 32 33 34 35

есть ли какая-либо функция php, которая может обрабатывать это или любое другое решение php?

мой код:

$string = array('1 - 5','9','11','24 - 35'); $arr = explode(",", $string); foreach ($arr as $val) { if (preg_match("/ - /", $val)) { $val = trim($val); $min= trim(substr($val, 0, 2)); $max = trim(substr($val, -2)); } } 

Большое спасибо!

Вы использовали беспорядок в массиве без необходимости. вам нужно обработать массив как массив для начала.

С помощью range() вы можете легко генерировать числа между x - y .

Также нет необходимости в том, чтобы задействовать механизм регулярного выражения в чем-то столь же простой, как is there a hyphen in this string

 $string = array('1 - 5','9','11','24 - 35'); $new_arr = array(); foreach ($string as $val) { if (strpos($val,'-') !== false) { $v2 = explode('-', $val); foreach (range($v2[0],$v2[1]) as $v) $new_arr[] = $v; } else { $new_arr[] = $val; } } print_r($new_arr); 

РЕЗУЛЬТАТЫ:

 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 24 [8] => 25 [9] => 26 [10] => 27 [11] => 28 [12] => 29 [13] => 30 [14] => 31 [15] => 32 [16] => 33 [17] => 34 [18] => 35 ) 

Вы должны использовать range ()

 <?php foreach (range(24, 35) as $number) { echo $number."\n"; } ?> 

Вывод:

 24 25 26 27 28 29 30 31 32 33 34 35 

http://codepad.org/kcozaHbp

Используйте range() для получения массива чисел в диапазоне.

Источник

 <?php $numbers = ['1 - 5','9','11','24 - 35']; $newNumbers = []; foreach ($numbers as $i => $num) { $numRange = explode('-', str_replace(' ', '', $num)); if (count($numRange) != 1) { $newNumbers = array_merge($newNumbers, range($numRange[0], $numRange[1])); } else { $newNumbers[] = $num; } } var_dump($newNumbers); /** Outputs array(19) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(9) [6]=> int(11) [7]=> int(24) [8]=> int(25) [9]=> int(26) [10]=> int(27) [11]=> int(28) [12]=> int(29) [13]=> int(30) [14]=> int(31) [15]=> int(32) [16]=> int(33) [17]=> int(34) [18]=> int(35) } 
 $string = '1 - 5,9,11,24 - 35'; $arr = explode(',', $string); foreach ($arr as $val) { if (count($values = explode('-', $val)) === 2) { $range = range(min(trim($values[0]), trim($values[1])), max(trim($values[0]), trim($values[1]))); var_dump($range); } } 

Надеюсь, поможет

 $string = array('1 - 5','9','11','24 - 35'); foreach ($string as $key => $val) { preg_match_all("/[0-9]+/", $val, $matches); if(count($matches[0]) == 1) { //single number $string[$key] = $matches[0][0]; } elseif(count($matches[0]) == 2) { $n1 = intval($matches[0][0]); $n2 = intval($matches[0][1]); $vals = range($n1, $n2); $string[$key] = implode(" ", $vals); } else { throw new \RuntimeException("more than 2 numbers"); } } print_r($string); 

результат:

 Array ( [0] => 1 2 3 4 5 [1] => 9 [2] => 11 [3] => 24 25 26 27 28 29 30 31 32 33 34 35 ) 

Ваша $string не является строкой, это массив, поэтому не нужно взорвать массив и попытаться использовать preg_split () для разделения строк. Используйте range () и implode () без использования подобной петли,

 <?php $arr = array('1 - 5','9','11','24 - 35'); foreach ($arr as $val) { $range = preg_split("/ - /", $val); if(count($range)==2 && $range[0]<$range[1]){ echo implode(',',range($range[0],$range[1])); echo "\n"; } } ?> 

Демо с диапазоном без использования цикла