php字符串到整数的转换和比较


php string to integer conversion and comparison

我有点困惑,希望你们能帮忙。我正在写一些简单的东西,从发布的名称字段中获取一个值并返回它,事先检查它是字符串(正确的)还是整数(在这种情况下,它会说"名称不是数字")。

<?php
$number = array("1","2","3","4","5","6","7","8","9","0");
if(!isset($_POST['submit'])){
?>
<p>Enter your name</p>
<form method="post" action="action4.php">
    <input type="text" name="name">
    <input type="submit" name="submit">
</form>
<?php
}else{
$name = $_POST['name'];
foreach($number as $v){
$int = (int)$v;
}
if($name == $int){
    print "This is a number and not a name.";
}else{
            print $name;
   }
}
?>

假设输入到name字段的每个数字都被视为一个字符串,我循环遍历数组并将每个数字转换为一个整数。然而,当在名称字段中输入一个整数时,我得到的不是"这是一个数字而不是名称",而是$name。反过来,如果我输入一个字符串,我会得到"这是一个数字,而不是一个名字。"

在if语句中var_dumping name和int会按预期返回:$name作为字符串,$int作为整数。那么,为什么他们把它们比作真的呢?

因为您只在foreach循环中分配一个变量,所以$v的最终值是0。当PHP将字符串与整数进行比较时,它会将字符串转换为整数来进行比较(请参阅类型杂耍)。所以$name变成00等于0,所以if语句始终为真。

为了克服这一点,您需要比较变量类型(并在foreach循环中进行比较)。这意味着使用===比较运算符来比较类型和值,而不是==只比较值。

参考:比较运算符,类型杂耍

您必须使用===来比较变量的类型和值。如果使用==,php将在比较之前自动转换这两个值。

但是,为了检查输入是否不是整数,使用is_numeric进行测试就足够了。