1. 程式人生 > >【PHP】in_array需要注意的點

【PHP】in_array需要注意的點

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'進行比較,0number型別,'s'string型別,根據php manualComparison Operators一章的說明可知,numberstring進行比較的時候,會先將string型別首先轉化為number,然後再進行比較操作。 's'

轉化為number的結果為0,而0 == 0的結果是true,所以in_array($string, $array)的結果也是 true

如果把in_array()的第三個引數strict設定為true,比較的時候就會判斷值和型別是否都相等。如果都相等的話,才會返回true,否則返回false