我有一個in_array
函數的問題。測試下面的回報true
:如果needle爲0,in_array返回true
in_array(0, array('card', 'cash'))
這怎麼可能,我怎麼能阻止它?
然而
in_array(null, array('card', 'cash'))
回報false
。
我有一個in_array
函數的問題。測試下面的回報true
:如果needle爲0,in_array返回true
in_array(0, array('card', 'cash'))
這怎麼可能,我怎麼能阻止它?
然而
in_array(null, array('card', 'cash'))
回報false
。
的回答可以是鑄造0
串,這樣:
in_array((string) 0, array('card', 'cash'))
記住0
可以有一些變化,所以鑄造可以是有益的。
in_array
字符串比較
轉換而比較不兼容的數據類型 這意味着cash
或card
轉化爲0
這一切都是因爲類型轉換成int
您有2個選項
1。類型轉換上in_array
in_array(string(0), array('card', 'cash'))) === false;
2。用third parameter
到true
將匹配該數據類型
in_array(0, array('card', 'cash'), true) === false;
OOPS!有點晚回答.. – alwaysLearn
可以防止它通過使用 '嚴格' 參數:
var_export(in_array(0, array('card', 'cash'), true));
var_export(in_array(null, array('card', 'cash'), true));
在這兩種情況下都返回false。
If the third parameter strict is set to TRUE then the in_array()
function will also check the types of the needle in the haystack.
(INT)0(INT) '卡'? –
LOOSE TYPING ...你正在比較數字與字符串,所以字符串被轉換爲數字,在這種情況下爲0,並且0 == 0.使用可選的STRICT參數 –
謝謝@MarkBaker – hsz