質問

次の関数は私にナッツを運転しました。地球100Xが100に等しく、次に100倍が整数として報告されますか?
私の人生のために、私はそれを理解することができません。 あなたは全部をコピーして貼り付けて自分のためにそれを見ることができます。
私はここでどこかに簡単なポイントを見逃して、私を皆さんに助けてください。

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機能の上にBATからすぐになるのですが、なぜPHPが100X= 100が等しいと考える理由を見つけるのはまだ超興味があります。

役に立ちましたか?

解決

As you can see in this example, casting 100x as an integer converts it to 100. Since you are not using strict comparison, '100x' == 100 is true. PHP removes the x from it to make just 100.

You could use strict comparison (which also compares the types), such that '100x' === 100 would return false. Using it, any time a string was compared to an integer, it would return false.


As per your edit: is_numeric may not be the most reliable, as it will return true for numbers formatted as a string, such as '100'. If you want the number to be an integer (and never a string), you could use is_integer instead. I'm not quite sure what exactly you're doing, but i thought I'd add this note.

他のヒント

I think you should use three equal signs in your IF:

if ($orgval===$num) {

Otherwise PHP casts the value 100x to 100 and 100=100.

Documentation: Comparison Operators

What kind of check do you want to do? There are a few ways you could go about it:

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

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

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

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

It depends on how closely you want to check if it's an integer. Does it matter if you need to trim() it first?

Either cast it to an int or try http://php.net/manual/en/function.ctype-digit.php. You also need === in your if.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top