有没有办法在不执行此冗余代码的情况下测试范围:
if ($int>$min && $int<$max)
Run Code Online (Sandbox Code Playgroud)
?
像一个功能:
function testRange($int,$min,$max){
return ($min<$int && $int<$max);
}
Run Code Online (Sandbox Code Playgroud)
用法:
if (testRange($int,$min,$max))
Run Code Online (Sandbox Code Playgroud)
?
PHP有这样的内置函数吗?或者其他任何方式吗?
小智 88
使用1000000次循环测试您的3种方式.
t1_test1 ($val >= $min && $val <= $max):: 0.3823 ms
t2_test2 (in_array($val, range($min, $max)):: 9.3301 ms
t3_test3 (max(min($var, $max), $min) == $val):: 0.7272 ms
T1最快,基本上是这样的:
function t1($val, $min, $max) {
return ($val >= $min && $val <= $max);
}
Run Code Online (Sandbox Code Playgroud)
Lar*_*jny 16
没有内置函数,但您可以通过调用函数min()并max()适当地轻松实现它.
// Limit integer between 1 and 100000
$var = max(min($var, 100000), 1);
Run Code Online (Sandbox Code Playgroud)
Lui*_*ety 10
大多数给定的例子假设对于测试范围[$ a .. $ b],$ a <= $ b,即极值范围是低 - 高阶,大多数假设所有都是整数.
但我需要一个函数来测试$ n是否介于$ a和$ b之间,如下所述:
Check if $n is between $a and $b even if:
$a < $b
$a > $b
$a = $b
All numbers can be real, not only integer.
Run Code Online (Sandbox Code Playgroud)
有一种简单的测试方法.
我将测试基于以下事实:当$ n介于$ a和$ b之间时,并且当$ n超出$ a .. $ b范围时($n-$a),($n-$b)具有不同的符号.
此函数适用于测试递增,递减,正数和负数,不限于仅测试整数.
function between($n, $a, $b)
{
return (($a==$n)&&($b==$n))? true : ($n-$a)*($n-$b)<0;
}
Run Code Online (Sandbox Code Playgroud)
我无法发表评论(声誉不够)所以我将在这里修改Luis Rosety的答案:
function between($n, $a, $b) {
return ($n-$a)*($n-$b) <= 0;
}
Run Code Online (Sandbox Code Playgroud)
此函数也适用于n == a或n == b的情况.
证明:设n属于范围[a,b],其中[a,b]是实数的子集.
现在a <= n <= b.然后na> = 0并且nb <= 0.这意味着(na)*(nb)<= 0.
情况b <= n <= a的工作方式类似.