Php 在U数组中奇怪的逻辑:在U数组中(“0E3”、“0E97”、“0E27”)==true
我检查了Php 在U数组中奇怪的逻辑:在U数组中(“0E3”、“0E97”、“0E27”)==true,php,Php,我检查了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]=> st
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)
为什么是“真的”?:) 在PHP眼中,这三个字符串都是数字;在本例中,e(或e)表示指数,PHP将基数与指数(或幂)分开。例如,
0E3
表示0*1000
,其他两个字符串的等效值(更多的零)。因此,PHP将字符串视为数字,并且,由于0乘以任何值都是0,因此将它们视为相等。
如果字符串中的字母不是E
,而是例如F
,则字符串将不同。只有e和e有这个特殊的意义
您可以通过拨打以下电话轻松强制执行更严格的检查:
var_dump(in_array($c, $hashes, true));
当字符串相同时,这将仅返回true。值得添加
e
(或e
)在本例中表示exponent
,它将基数与指数(或幂)分开。谢谢@marekful,我在答案中加入了您的评论。它比放零更好更精确。。。