Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算两个数字之间的差值_Php - Fatal编程技术网

Php 计算两个数字之间的差值

Php 计算两个数字之间的差值,php,Php,我想计算两个给定数字之间的差异,例如: 1-5或24-35 我必须在数组中分隔数字,并写出它们之间的差异,如: 12345或2425262728293032334335 是否有任何php函数可以处理该问题或任何其他php解决方案 我的代码: $string = array('1 - 5','9','11','24 - 35'); $arr = explode(",", $string); foreach ($arr as $val) {

我想计算两个给定数字之间的差异,例如:
1-5或24-35

我必须在数组中分隔数字,并写出它们之间的差异,如:
12345或2425262728293032334335

是否有任何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));

      }
    }       

非常感谢

您的
$string
不是字符串,而是数组,因此无需分解数组并尝试使用来拆分字符串。使用和不使用类循环

<?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";
    }
}  
?>

您应该使用

使用
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
)

您在阵列上不必要地使用了内爆。首先需要将数组作为数组进行处理

使用
range()
可以很好地生成
x-y
之间的数字

也不需要让正则表达式引擎参与像
这样简单的事情,这个字符串中是否有连字符

$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
)

您的代码是否成功地确定了
$min
$max
?一旦你有了这些值,你就可以从一个循环到另一个循环来获取它们之间的值。你可能正在寻找
range()
$string=array(…
听起来有点错误,这可能就是你剩下的代码不起作用的原因。它可以在
else
部分中处理。实际上,我只回答了OP要求的范围。现在,我如何将数组按正确的顺序排列?因为我需要按正确的顺序排列数组!将每个范围按新的数组并对其进行排序,读取ried this:$nice=$arr[3];$arr2=explode(“,”,$nice);foreach($arr2为$val1){if(strpos($val1,“-”)!=FALSE){$val1=trim($val1);$str1=substr($val1,0,2);$str2=substr($val1,--2);foreach(range($str1,$str1,$str2))为$val2){echo$val2;}}}
$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 = 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
)