PHP比较'==';问题

PHP比较'==';问题,php,conditional-operator,Php,Conditional Operator,为什么输出是“in” <?php if (1=='1, 3') { echo "in"; } ?> 输出应为: in 从PHP文档中: 从字符串转换为字符串时 整数,PHP分析字符串1 一次一个字符,直到找到一个 非数字字符。(该号码可为, (可选)以+或-号开头。) 结果数字被解析为 十进制数(以10为基数)。失败 解析有效的十进制数返回 值为0 我猜你想知道一个变量是否在一个值范围内 您可以在数组中使用: if (in_array(1

为什么输出是“in”

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

输出应为:

in
从PHP文档中:

从字符串转换为字符串时 整数,PHP分析字符串1 一次一个字符,直到找到一个 非数字字符。(该号码可为, (可选)以+或-号开头。) 结果数字被解析为 十进制数(以10为基数)。失败 解析有效的十进制数返回 值为0


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

您可以在数组中使用

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

您正在比较字符串和整数。必须首先将字符串转换为整数,PHP将数字字符串转换为整数。由于该字符串的开头是“1”,它将数字1与数字1进行比较,两者相等


你想要什么功能?

因为PHP正在做,它正在把一个字符串变成一个整数,它的方法是这样做的:它将所有的数字计数,直到一个非数值。在您的例子中,这是子字符串('1')(因为
是第一个非数字字符)。如果字符串不是以数字开头,则得到0。

请参阅PHP文档:


如果您试图检查1是否等于1或3,那么我肯定会这样做:

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

=
运算符对这两个值进行类型转换,以使它们成为相同的类型。在您的示例中,它将把字符串中的第二个值转换为整数,该整数等于
1
。这显然等于您匹配的值

如果您的第一个值是引号中的字符串(即
'1'
),而不是整数,那么匹配将失败,因为两侧都是字符串,因此它将进行字符串比较,并且它们是不同的字符串

如果您需要一个不进行类型转换的精确匹配运算符,PHP还提供了一个三重相等运算符,
==
,这可能是您需要的


希望这能有所帮助。

你想实现什么?我还想补充一点,如果他使用“==”(身份比较),他也会比较类型。+1取消-1,因为你解释了为什么会发生这种效果(至少有相关信息)。。。
if (1 == 1 || 1 == 3)