PHP:如何确定变量的值是否在两个不同的常量值之间?

45

如何使用 PHP 代码确定我有一个具有以下值的变量:

  • 介于1和10之间,或
  • 介于20和40之间?

3
不,我不明白你的意思!你是指“在1和10之间随机选择一个数字”吗?还是“计算1和10之间的中间值”?还是其他什么意思? - Oliver Charlesworth
2
你的问题不够清晰。你是想要在1到10或20到40之间获取一个随机值,还是想要测试某个值是否在这些范围内?或者是其他什么问题? - Felix Kling
1
我知道,PHP真的需要一个类似于BETWEEN语句的SQL等价物。if(x>=1 && x<=10)并不难,但是用between可能更整洁。 - Justin Levene
9个回答

89
if (($value > 1 && $value < 10) || ($value > 20 && $value < 40))

1
忽略了数字可能是1或10、20或40的事实。 - VikingBlooded
9
@VikingBlooded:得爱英语的歧义和错位一位错误。(翻译:@VikingBlooded说,英语中的歧义和偏移一个单位的错误真是让人又爱又恨。) - Daniel A. White
1
PHP中没有检查一个数字是否在两个数字之间的辅助函数吗? - Ebrahim Bashirpour

22
你是指这样吗:
$val1 = rand( 1, 10 ); // gives one integer between 1 and 10
$val2 = rand( 20, 40 ) ; // gives one integer between 20 and 40

或者说:

$range = range( 1, 10 ); // gives array( 1, 2, ..., 10 );
$range2 = range( 20, 40 ); // gives array( 20, 21, ..., 40 );

或者也许:

$truth1 = $val >= 1 && $val <= 10; // true if 1 <= x <= 10
$truth2 = $val >= 20 && $val <= 40; // true if 20 <= x <= 40

假设你想:

$in_range = ( $val > 1 && $val < 10 ) || ( $val > 20 && $val < 40 ); // true if 1 < x < 10 OR 20 < x < 40

10

你可以这样做:

if(in_array($value, range(1, 10)) || in_array($value, range(20, 40))) {
   # enter code here
}

7
看起来很简洁,但请注意,例如对价格进行介于1到一百万之间的测试意味着创建一个拥有一百万项的数组。我刚刚使用microtime()测量了这两种方法,对于这样大范围的测试,后者似乎运行速度要慢大约2000倍,同时还会消耗大量的内存。 - Josef Habr
1
解决方案“看起来很棒”,但“效果很糟糕”。 - undefined

7
if (($value >= 1 && $value <= 10) || ($value >= 20 && $value <= 40)) {
   // A value between 1 to 10, or 20 to 40.
}

5

很抱歉回答晚了,但是这个函数可以让你做到那件事。

  function int_between($value, $start, $end) {
    return in_array($value, range($start, $end));
  }

  // Example
  $value1 = 20;
  $value2 = 40;
  echo int_between(20, $value1, $value2) ? "true" : "false";

4

从标签 'operand' 可以猜测您想要检查一个值?

$myValue = 5;
$minValue = 1;
$maxValue = 10;

if ($myValue >= $minValue && $myValue <= $maxValue) { 
  //do something
}

1

这是一个很好的解决方案。

function int_between($value, $min, $max) {
    return in_array($value, range($min, $max));
}

我认为这个比上面的更快

function int_between2($value, $min, $max) {
    return $value == min($max, max($min, $value));
}

但是,这比其他的快三倍。

function int_between3($value, $min, $max) {
    return ($value >= $min && $value <= $max);
}

0
如果您只是想检查值是否在范围内,请使用以下代码:
   MIN_VALUE = 1;
   MAX_VALUE = 100;
   $customValue = min(MAX_VALUE,max(MIN_VALUE,$customValue)));

3
这并不检查值是否在范围内,它返回一个新值,该值将在范围内。 - Gonzalingui
必须加以解释,赋予定制价值,如果在范围内则返回定制价值本身 - undefined

0

试一试

if (($val >= 1 && $val <= 10) || ($val >= 20 && $val <= 40))

This will return the value between 1 to 10 & 20 to 40.

忽略了数字可能是1或10、20或40的事实。 - kakarot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接