如何检查PHP中的整数是否在数字范围内?

Ric*_*ers 57 php int range

如何检查给定数字是否在数字范围内?

Dan*_*umb 106

表达方式:

 ($min <= $value) && ($value <= $max)
Run Code Online (Sandbox Code Playgroud)

如果为真$value之间$min$max(含)

有关比较运算符的更多信息,请参阅PHP文档

  • 根据在询问"整数"时OP是否真的意味着"整数",当$ value`为浮点数时,这将产生错误结果.此外,由于比较是松散的,传递一个字符串可能会产生错误的结果,例如`(0 <='string')&&('string'<= 10));由于类型杂耍,`是'true`. (3认同)

Gor*_*don 103

您可以使用 filter_var

filter_var(
    $yourInteger, 
    FILTER_VALIDATE_INT, 
    array(
        'options' => array(
            'min_range' => $min, 
            'max_range' => $max
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

这还允许您指定是否要允许整数的八进制和十六进制表示法.请注意,该功能是类型安全的.5.5不是整数,而是浮点数,不会验证.

有关使用PHP过滤数据的详细教程:

  • 这应该完全是答案!好的代码! (4认同)

Bob*_*obz 25

可能有帮助:

if ( in_array(2, range(1,7)) ) {
    echo 'Number 2 is in range 1-7';
}
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.range.php

  • 值得注意的是,由于范围的产生而具有存储器成本. (5认同)
  • @pr1nc3 但是当它的范围很大时,这个解决方案非常慢并且非常消耗内存。 (3认同)

Luk*_*uke 13

您可以启动一个小帮助函数来执行此操作:

/**
 * Determines if $number is between $min and $max
 *
 * @param  integer  $number     The number to test
 * @param  integer  $min        The minimum value in the range
 * @param  integer  $max        The maximum value in the range
 * @param  boolean  $inclusive  Whether the range should be inclusive or not
 * @return boolean              Whether the number was in the range
 */
function in_range($number, $min, $max, $inclusive = FALSE)
{
    if (is_int($number) && is_int($min) && is_int($max))
    {
        return $inclusive
            ? ($number >= $min && $number <= $max)
            : ($number > $min && $number < $max) ;
    }

    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

你会像这样使用它:

var_dump(in_range(5, 0, 10));        // TRUE
var_dump(in_range(1, 0, 1));         // FALSE
var_dump(in_range(1, 0, 1, TRUE));   // TRUE
var_dump(in_range(11, 0, 10, TRUE)); // FALSE

// etc...
Run Code Online (Sandbox Code Playgroud)


lon*_*day 7

if (($num >= $lower_boundary) && ($num <= $upper_boundary)) {
Run Code Online (Sandbox Code Playgroud)

如果希望边界值无效,则可能需要调整比较运算符.


Nab*_*imi 7

其他一些可能性:

if (in_array($value, range($min, $max), true)) {
    echo "You can be sure that $min <= $value <= $max";
}
Run Code Online (Sandbox Code Playgroud)

或者:

if ($value === min(max($value, $min), $max)) {
    echo "You can be sure that $min <= $value <= $max";
}
Run Code Online (Sandbox Code Playgroud)

实际上,这就是用来将超出范围的值转换为其最近端的值。

$value = min(max($value, $min), $max);
Run Code Online (Sandbox Code Playgroud)

例子

/**
 * This is un-sanitized user input.
 */
$posts_per_page = 999;

/**
 * Sanitize $posts_per_page.
 */
$posts_per_page = min(max($posts_per_page, 5), 30);

/**
 * Use.
 */
var_dump($posts_per_page); // Output: int(30)
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 5

您可以尝试以下单一语句:

if (($x-$min)*($x-$max) < 0)
Run Code Online (Sandbox Code Playgroud)

或者:

if (max(min($x, $max), $min) == $x)
Run Code Online (Sandbox Code Playgroud)

  • `min()` 和 `max()` 将在实际硬件实现中使用比较,因此同时执行 `min` 和 `max` 以及单个比较将导致总共执行三个。相反,只需编写“if ($min &lt; $x and $x &lt; $max)”,它将在最坏的情况下进行两次比较,并且如果值“$x”小于“$min”限制,则仅进行一次比较。使用汇编程序的乘法变体可能会更快,因为它可以非常有效地使用 CPU 流水线,但对于 PHP,我建议对其进行测试,而不是假设它比中间带有快捷方式“and”的两个比较更好。 (2认同)