假設我有以下數組:意外in_array()行爲
$enabled = array(
'page' => 'page',
'article' => 0,
);
注意「文章」是一個重要的,但不是一個值。由於in_array()
搜索匹配值,我希望下面的一行返回FALSE:
in_array('article', $enabled)
然而,它返回TRUE。爲什麼?我錯過了什麼?
假設我有以下數組:意外in_array()行爲
$enabled = array(
'page' => 'page',
'article' => 0,
);
注意「文章」是一個重要的,但不是一個值。由於in_array()
搜索匹配值,我希望下面的一行返回FALSE:
in_array('article', $enabled)
然而,它返回TRUE。爲什麼?我錯過了什麼?
功能in_array()
默認執行鬆散比較,這將導致PHP計算表達式(0 == "article")
作爲TRUE
。
您需要使用嚴格的參數in_array()
也檢查類型的針在草堆:
var_dump(in_array('article', $enabled, true));
傳遞的第三個參數進行嚴格的類型檢查:
in_array('article', $enabled, true);
否則,PHP會嘗試比較0
(整數)和'article'
(串)。
→ 'article'
evalutes爲0!
→他們是平等的!
謝謝!我仍然困惑爲什麼「文章」會== 0,因爲如果有的話,我會認爲它會==「1」。你能指出解釋這個的文檔嗎?我很欣賞答案。 –
@JoelStein:這裏你去:[php.net/manual/en/language.types.string.php](http://php.net/manual/en/language.types.string.php#language.types。 string.conversion) –