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

时间:2013-11-30 02:09:44

标签: php string integer comparison operator-keyword

我有些困惑,并希望你们可以提供帮助。我正在编写一些简单的东西,它从发布的名称字段中获取值并返回它,检查事先看到它的字符串(正确)或整数(在这种情况下它会说'名称不是数字')

<?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。相反,如果我输入一个字符串,我得到“这是一个数字,而不是一个名字。”

var_dumping if语句中的name和int都按预期返回:$ name as string,$ int as integer。那他们为什么比较真实呢?

2 个答案:

答案 0 :(得分:0)

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

但要检查输入不是整数,应该足以用is_numeric进行测试。

答案 1 :(得分:0)

因为除了在foreach循环中分配变量之外什么都不做,$v的最终值为0。当PHP将字符串与整数进行比较时,它会将字符串转换为整数以进行比较(请参阅类型Juggling)。因此$name变为00等于0所以你的if语句总是正确的。

要解决此问题,您需要比较变量类型(并在foreach循环中进行比较)。这意味着使用===比较运算符来比较类型和值,而不仅仅是==所做的值。

参考:Comparison operatorsType juggling