【问题标题】:Is this php behaviour explained somewhere in manual? (strings with zeroes comparison)这种 php 行为是否在手册中的某处进行了解释? (带零比较的字符串)
【发布时间】:2012-12-20 01:59:56
【问题描述】:

为什么选择 php

'00' == '0000'

表达式是true?

手册的某处有解释吗?

注意

这个:

如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式进行比较

不适合这种情况,两个操作数都是字符串。

【问题讨论】:

  • 见鬼,我还是不明白我们为什么要这样做。查看字符串是否为数字 - 然后强制转换 - 然后进行比较。为什么我们不能像比较 '00s' 和 '0s' 一样将 '00' 和 '0' 进行比较?
  • 嗯,终于知道了,stackoverflow.com/a/16880342/285587

标签: php


【解决方案1】:

“如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式进行比较。” (PHP manual)

【讨论】:

  • "或者比较涉及数字字符串" ---哦,我错过了,对。我不专心,并会在 15 分钟超时后标记此答案。
【解决方案2】:

没问题

== compares values and neglects type
=== compares values and types

这里是:

http://php.net/manual/en/language.operators.comparison.php

*更新:

在此 URL 中阅读此部分:

http://php.net/manual/en/function.intval.php

字符串很可能返回 0,尽管这取决于 字符串最左边的字符。整数转换的通用规则 申请。

【讨论】:

  • 字符串'00'的值不等于字符串'0000'的值,比如字符串'a'不等于字符串'b'
  • @zerkms 看起来像数字的字符串被 PHP 转换成数字。
  • 任何全部由数字组成的字符串都会被转换为数字进行比较(当然在左边)
  • @Shehabox:我问了“为什么”的确切解释
  • “试试这个:” --- 天哪,我问的是手册中的引用,而不是其他示例。
【解决方案3】:

因为当你比较这个字符串时,它们两边都变成零,所以 0 == 0 为真,请尝试使用 '00' === '0000' here is link

【讨论】:

  • “如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式进行比较”来自我发布的链接
  • @zerkms 解释在你的答案中。
【解决方案4】:

刚刚阅读:

如果 [...] 比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较

我移除了可能阻碍你前进的部分。

【讨论】:

    【解决方案5】:

    记住这一点也很好

    如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。这些规则也适用于 switch 语句。当比较是 === 或 !== 时不会发生类型转换,因为这涉及比较类型和值。 enter link description here

    但其他人所说的一切都是正确的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2021-09-07
      相关资源
      最近更新 更多