【PHP】in_array需要注意的點
阿新 • • 發佈:2019-02-13
in_array (PHP 4, PHP 5, PHP 7) in_array — 檢查陣列中是否存在某個值 說明 ---- bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 大海撈針,在大海(haystack)中搜索針( needle),如果沒有設定 strict 則使用寬鬆的比較。 引數 ---- needle 待搜尋的值。 Note: 如果 needle 是字串,則比較是區分大小寫的。 haystack 待搜尋的陣列。 strict 如果第三個引數 strict 的值為 TRUE 則 in_array() 函式還會檢查 needle 的型別是否和 haystack 中的相同。 返回值 ---- 如果找到 needle 則返回 TRUE,否則返回 FALSE。
看問題:
<?php
$array = range(0, 7);
$string = 's';
if (in_array($string, $array)) {
echo 1;
} else {
echo 2;
}
// 輸出結果為 1
很顯然這並不是我們期望的結果。但究竟為啥會這樣呢?
因為in_array()
會將0
和's'
進行比較,0
是number
型別,'s'
是string
型別,根據php manual
中Comparison Operators
一章的說明可知,number
和string
進行比較的時候,會先將string
型別首先轉化為number
,然後再進行比較操作。 's'
number
的結果為0
,而0 == 0
的結果是true
,所以in_array($string, $array)
的結果也是 true
。
如果把in_array()
的第三個引數strict
設定為true
,比較的時候就會判斷值和型別是否都相等。如果都相等的話,才會返回true
,否則返回false
。