簡體   English   中英

in_array奇怪的邏輯:in_array(“ 0E3”,[“ 0E97”,“ 0E27”])=== true

[英]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。

如果 (in_array(<title> , $SomeArray)) 返回真&lt;/div&gt;</title><div id="text_translate"><p> 我的問題是它無法檢測到字符串中的每個單詞。 類似於過濾器或標簽或類別或排序的..</p><pre> $title = "What iS YouR NAME?"; $english = Array( 'Name', 'Vacation' ); if(in_array(strtolower($title),$english)){ $language = 'english'; } else if(in_array(strtolower($title),$france)){ $language = 'france'; } else if(in_array(strtolower($title),$spanish)){ $language = 'spanish'; } else if(in_array(strtolower($title),$chinese)){ $language = 'chinese'; } else if(in_array(strtolower($title),$japanese)){ $language = 'japanese'; } else { $language = null; }</pre><p> output 是 null.. =/</p></div>

[英]if (in_array(<title>, $SomeArray)) return true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM