【问题标题】:PHP comparison '==' problemPHP比较'=='问题
【发布时间】:2011-05-26 16:43:52
【问题描述】:

为什么输出'in'?

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

【问题讨论】:

标签: php conditional-operator


【解决方案1】:

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

如果您的第一个值是字符串 - 即引号中的 '1',而不是整数,那么匹配将失败,因为双方都是字符串,所以它会进行字符串比较,它们是不同的字符串。

如果您需要一个不进行类型转换的完全匹配运算符,PHP 还提供了一个三等号运算符 ===,这可能是您正在寻找的。​​p>

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    因为 PHP 正在执行type conversion,它将字符串转换为整数,并且这样做的方法可以将所有数字计数到非数字值为止。在您的情况下,这是子字符串 ('1') (因为 , 是第一个非数字字符)。如果你的字符串不是以数字开头,你会得到 0。

    【讨论】:

      【解决方案3】:

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

      你想要什么功能?

      【讨论】:

      • 我还想补充一点,如果他使用了“===”(身份比较),他也会比较类型。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

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

          你可以使用in_array:

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

          【讨论】:

            【解决方案7】:
            if(in_array(1, array(1,3)) {
                echo "in";
            }
            

            【讨论】:

              【解决方案8】:

              输出应该是:

              in
              

              来自 PHP 的文档:

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

              【讨论】:

              • +1 取消 -1,因为您确实解释了为什么会发生这种效果(至少有相关信息)...
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-08
              • 1970-01-01
              • 1970-01-01
              • 2011-06-03
              • 2013-12-27
              • 1970-01-01
              相关资源
              最近更新 更多