[英]in_array strange logic: in_array(“0E3”, [“0E97”, “0E27”]) === true
我檢查了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等於0,因此將它們全部視為相等。 如果字符串中的字母不是E
而是F
則字符串將不同。 只有e和E具有此特殊含義。
您可以通過以下方法輕松強制進行更嚴格的檢查:
var_dump(in_array($c, $hashes, true));
當字符串相同時,這只會返回true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.