我检查hachids
包是否有冲突,但我的检查脚本中有一个奇怪的结果(在macOS 10.12.6上)。
我从检查脚本中重写了一些代码并提出了一个问题:
# php -v
PHP 7.1.11 (cli) (built: Oct 27 2017 11:00:43) ( NTS )
# php -a
php > $hashes = array('0E97', '0E27');
php > var_dump($hashes);
array(2) {
[0]=>
string(4) "0E97"
[1]=>
string(4) "0E27"
}
php > $c = '0E3';
php > var_dump($c);
string(3) "0E3"
php > var_dump(in_array($c, $hashes));
bool(true)
为什么'真'? :)
答案 0 :(得分:2)
在PHP眼中,所有三个字符串都是数字的;在这种情况下,e(或E)表示指数,PHP将基数与指数(或幂)分开。例如,0E3
表示0*1000
,而其他两个字符串的等价物(仅更多零)。因此,PHP会将字符串视为数字,并且,因为0乘以任何值为0,所以将它们视为相等。
如果字符串中的字母不是E
,而是F
字符串会有所不同。只有e和E才有这个特殊含义。
您可以通过致电:
轻松强制进行更严格的检查 var_dump(in_array($c, $hashes, true));
当字符串相同时,这只会返回true。