PHP中in array 函式的坑

2021-09-12 03:42:14 字數 1101 閱讀 3881

$arr = array('name' => 'test', '***' => 'male','age' => 0);
if(in_array('h232',$arr))  else
結果輸出 :  'yes'

查詢手冊,手冊上也只是說in_array() : 檢查資料中是否存在某個值。

in_array( mixed$needle, array$haystack[, bool$strict=false] ) 

neddle : 待搜尋的值

note:

如果needle是字串,則比較是區分大小寫的。

haystack

待搜尋的陣列。

note:

如果haystack只適合一維陣列

strict

如果第三個引數strict的值為truein_array()函式還會檢查needle的型別是否和haystack中的相同

返回值:

如果找到needle則返回true,否則返回false

但是,手冊中沒說具體是怎麼查詢的,經過分析。in_array()函式的value值會與搜尋的值比較,如果不加第三個引數,in_array()會把搜尋的型別強制轉換成和value值一樣進行比較。 

所以,上面的搜尋值 『h232』 在和value = 0 進行比較的時候 『h234』強制轉換成了number 0;

相當於 : var_dump('h232' == 0 ) = true;

結果為 : 'yes';

希望大家以後多多注意~

php中in array函式用法分析

php是弱型別語言 在使用in array函式時盡量帶上第三個引數,如下 複製 如下 var dump in array 0,array s sss true return false var dump in arrdobosay 0,array s sss n程式設計客棧bsp return tr...

in array 的那些坑

認證狀態 0 待審核,1 審核通過,2 不通過echo in array array 0 1 0 結果 1 echo in array null,array 0 1 0 結果 1 echo in array false,array 0 1 0 結果 1這麼大乙個坑,我們要怎麼繞過或者填起呢?echo...

PHP5 3中 in array 的乙個坑

因排查問題,發現目前生產環境的php版本5.3中有這個問題 echophp int max str 114100007160061630632 arr array 114100007160061630631 var dump in array str,arr echo php phpversion ...