2

以下功能让我发疯。究竟 100x 怎么可能等于 100,然后 100x 被报告为整数?
对于我的生活,我无法弄清楚。您可以复制并粘贴整个内容并亲自查看。
我在这里遗漏了一个简单的点,请帮帮我。

function blp_int($val) {
    $orgval = $val;
    $num = (int)$val;    
    echo "<li><font color=red>val: ". $val . " is being checked to see if it's an integer or not";
    echo "<li><font color=red>orgval: ". $orgval ;
    echo "<li><font color=red>num: ". $num ;
    if ($orgval==$num) {
        echo "<li><font color=red><b>YES IT IS! the [{$orgval}] is equal to [{$num}]</b>";
        return true;
    }
    return false;
}

if (blp_int("100"))
{
    echo "<h1>100 is an integer!</h1>";
}
else
{
    echo "<h1>100 is NOT an integer!</h1>";
}

if (blp_int("100x"))
{
    echo "<h1>100x is an integer!</h1>";
}
else
{
    echo "<h1>100x is NOT an integer!</h1>";
}

上面的代码,运行时返回以下内容;

val: 100 is being checked to see if it's an integer or not
orgval: 100
num: 100
YES IT IS. the [100] is equal to [100]
100 is an integer!

val: 100x is being checked to see if it's an integer or not
orgval: 100x
num: 100
YES IT IS. the [100x] is equal to [100]
100x is an integer!

我可以通过添加以下位来解决这种情况

    if (!is_numeric($val))
    {
        return false;
    }

到 blp_int 函数的顶部,但是,.. 我仍然非常想知道为什么 php 认为 100x=100 是相等的。

4

4 回答 4

2

正如您在此示例中所看到的,转换100x为整数会将其转换为100. 由于您没有使用严格比较'100x' == 100因此是正确的。PHPx从中删除100.

您可以使用严格比较(也比较类型),这样'100x' === 100会返回 false。使用它,任何时候将字符串与整数进行比较,它都会返回 false。


根据您的编辑: is_numeric可能不是最可靠的,因为对于格式化为字符串的数字(例如'100'. 如果您希望数字是整数(而不是字符串),则可以is_integer改用。我不太确定你到底在做什么,但我想我会添加这个注释。

于 2012-02-29T19:38:19.983 回答
1

我认为您应该在 IF 中使用三个等号:

if ($orgval===$num) {

否则 PHP 将值转换100x100and 100=100

文档:比较运算符

于 2012-02-29T19:37:12.230 回答
1

你想做什么样的检查?有几种方法可以解决:

if (preg_match('!^[0-9]+$!', $input))

if (intval($input) == $input)

if (intval($input) === $input)

if ('x'.intval($input) === 'x'.$input)

这取决于您要检查它是否为整数的程度。如果你需要trim()它,这有关系吗?

于 2012-02-29T19:39:42.713 回答
0

将其转换为int或尝试http://php.net/manual/en/function.ctype-digit.php。你还需要===在你的 if。

于 2012-02-29T19:36:42.150 回答