不能在特殊字符上使用in_array

时间:2014-11-22 15:10:03

标签: php

我有这段代码:

$string = "my;string";
$chars = array_merge(range('a','z'), range('A','Z'), range(0,9));

现在,如果我使用in_array()函数运行for循环验证$ string中$ string的每个字符,当它到达$ string的第三个字符时,它返回键值52,即值整数0;为什么in_array()将半圆视为整数零?

1 个答案:

答案 0 :(得分:0)

尝试运行此代码段:

var_dump(';' == 0);

您可能会非常惊讶地发现PHP会吐出 true !当您不检查类型时,PHP的行为通常非常违反直觉。你恐怕不能单靠松散的比较。

现在尝试运行此snippit:

var_dump(';' === 0);

PHP将返回 false - 完美!

幸运的是in_array函数有第三个参数,当设置为true时,确保使用严格的比较来确保类型相同。这里的简单解决方案是用in_array($char, $chars)替换in_array($char, $chars, true)的每个实例,问题就会消失。