PHP比较运算符“==”问题

5
为什么输出是 'in'?
<?php
    if (1=='1, 3')
    {
        echo "in";
    }
?>

你在尝试实现什么目标? - Jón Trausti Arason
3
http://php.net/manual/en/language.operators.comparison.php - Paul Norman
8个回答

5
== 运算符会对两个值进行类型转换,以尝试使它们成为相同的类型。在您的示例中,它将把第二个值从字符串转换为整数,这个整数等于 1。然后这显然等于你要匹配的值。
如果你的第一个值是一个字符串——即用引号括起来的 '1',而不是一个整数,那么匹配将失败,因为双方都是字符串,所以它将进行字符串比较,它们是不同的字符串。
如果您需要一个不进行类型转换的精确匹配运算符,PHP 还提供了三等运算符===,这可能是您要使用的运算符。
希望这可以帮助到你。

4
你正在比较一个字符串和一个整数。必须先将该字符串转换为整数,PHP会将数字字符串转换为整数。由于该字符串的起始位置是“1”,它将数字一与数字一进行比较,这些值相等。
您想要实现的功能是什么?

我还想补充一点,如果他使用了“===”(身份比较),他也会比较类型。 - Secko

4

由于PHP正在进行类型转换,它将一个字符串转换为整数,其方法是计算直到非数字值为止的所有数字。在您的情况下,这是子字符串('1')(因为,是第一个非数字字符)。如果您的字符串以数字以外的任何内容开头,您将得到0。


1
如果你想要检查1是否等于1或3,那么我肯定会这样做:
if (1 == 1 || 1 == 3)


0

输出应该是:

in

从 PHP 文档中:
当从字符串转换为整数时,PHP 逐个字符地分析该字符串,直到找到一个非数字字符。 (数字可以选择以加号或减号开头。)结果数字解析为十进制数字(基数为10)。 解析有效的十进制数失败将返回值0。

+1 取消 -1,因为您解释了为什么会出现这种效果(至少提供了相关信息)... - ircmaxell

0

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

你可以使用 in_array

if (in_array(1, array(1, 3, 5, 6)))
 echo "in";

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接