2010-12-16 124 views
4

为什么输出'in'?PHP比较'=='问题

<?php 
    if (1=='1, 3') 
    { 
     echo "in"; 
    } 
?> 
+0

你想完成什么? – raRaRa 2010-12-16 17:17:18

+3

http://php.net/manual/en/language。operators.comparison.php – 2010-12-16 17:18:10

回答

3

由于PHP正在做type conversion,它将字符串转换为整数,并且它的工作方法是将所有数字都计数到非数字值。在你的情况下,这是子字符串('1')(因为,是第一个非数字字符)。如果字符串开始什么,但一个数字,你会得到0

-1

输出应为:

in 

从PHP的文档:

当从一个字符串转换为 整数,PHP分析串的一个 字符在一个时间直到它会发现一个非数字字符 。 (编号可能为 (可选)以+或 - 符号开头。) 结果编号被解析为 十进制数(基数为10)。如果未能 解析一个有效的十进制数返回 值0

+1

问题是“为什么?” – thejh 2010-12-16 17:18:37

+1

我不明白downvotes。 :-s – 2010-12-16 17:21:40

+0

+1取消-1因为你确实解释了为什么效果正在发生(至少有相关的信息)... – ircmaxell 2010-12-16 17:58:09

0

我猜你想知道一个变量是否在范围内的值。

您可以使用in_array

if (in_array(1, array(1, 3, 5, 6))) 
echo "in"; 
0
if(in_array(1, array(1,3)) { 
    echo "in"; 
} 
4

您比较一个字符串和一个整数。该字符串必须首先转换为整数,PHP将数字字符串转换为整数。由于该字符串的开头是'1',因此它将数字1与数字1进行比较,它们是相等的。

你打算使用哪些功能?

+0

我还想补充一点,如果他已经使用了“===”(身份比较)他也会比较类型。 – Secko 2010-12-16 17:29:56

1

如果你想检查1等于1或3,那么我肯定会做这种方式:

if (1 == 1 || 1 == 3) 
5

==符不键入两个值转换,试图让它们是同一种类型。在你的例子中,它会将第二个值从一个字符串转换为一个整数,这将等于1。这显然等于你匹配的值。

如果你的第一个值是一个字符串 - 例如'1'用引号括起来,而不是一个整数,那么匹配会失败,因为双方都是字符串,所以它会做一个字符串比较,它们是不同的字符串。

如果您需要一个不会进行类型转换的精确匹配运算符,PHP还提供了一个tripple-equal运算符===,这可能是您正在寻找的内容。

希望有所帮助。