2013-10-09 117 views
1

假設我有以下數組:意外in_array()行爲

$enabled = array(
    'page' => 'page', 
    'article' => 0, 
); 

注意「文章」是一個重要的,但不是一個值。由於in_array()搜索匹配值,我希望下面的一行返回FALSE:

in_array('article', $enabled) 

然而,它返回TRUE。爲什麼?我錯過了什麼?

回答

7

功能in_array()默認執行鬆散比較,這將導致PHP計算表達式(0 == "article")作爲TRUE

您需要使用嚴格的參數in_array()也檢查類型的針在草堆:

var_dump(in_array('article', $enabled, true)); 

Demo!

+0

謝謝!我仍然困惑爲什麼「文章」會== 0,因爲如果有的話,我會認爲它會==「1」。你能指出解釋這個的文檔嗎?我很欣賞答案。 –

+0

@JoelStein:這裏你去:[php.net/manual/en/language.types.string.php](http://php.net/manual/en/language.types.string.php#language.types。 string.conversion) –

0

傳遞的第三個參數進行嚴格的類型檢查:

in_array('article', $enabled, true); 

否則,PHP會嘗試比較0(整數)和'article'(串)。
'article' evalutes爲0!
→他們是平等的!

Example @ codepad.org