奇怪的PHP输出

时间:2014-01-18 00:13:49

标签: php

有人可以向我解释为什么这段代码

$ar = [
  'item' => '−2',
];

for ($i = 1; $i >= -2; $i--) {
  foreach ($ar as $x => $y) {
    if ($y == $i) {
      echo $y . ' == ' . $i . "\n";
    }
  }
}

可生产

−2 == 0

3 个答案:

答案 0 :(得分:4)

你得到的结果是因为-2是一个字符串 - PHP没有进行数值比较。将==更改为===以使用严格比较,如果值及其类型相等,则仅返回true

答案 1 :(得分:3)

数组值中的“ - ”实际上是Unicode字符'MINUS SIGN'(U + 2212),PHP不认为它属于数字字符串。 (它只识别U + 002D,HYPHEN-MINUS,部分是因为它不支持该级别的UTF-8;对于库存PHP,所有字符串都是 byte 字符串。)因为它不是数字,字符串甚至不用数字数据启动,其数值为0。

如果删除Unicode短划线并输入短划线(应输入ASCII),脚本应按预期工作。

答案 2 :(得分:0)

经过一些研究,我知道它是如何工作的。首先,请从doc

中阅读

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

因为'-2'(初始部分),0被视为-,因此仅当i == 0表示-2 == 0时才会输入if语句。然后回显$y - $i