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
)