標籤:公司 源碼 sea ict 過程 變數 手冊 結果 來源
php開發過程中,經常會遇到判斷一維數組中是否含有某個元素,這是會用到in_array();由於php是弱類型的語言,所以不小心的話,也會踩到“坑”。(註:這裡測試用到的php版本是5.6。)那麼具體該如何注意呢?下面就來跟大家分享一些實用經驗。
一、前方有坑
直接上代碼:
$arr = [‘php在路上‘,1];
echo in_array(true,$arr) ? 1 : 0;
echo in_array(0,$arr) ? 1 : 0;
結果:
11
二、為啥有坑
其實,從底層源碼上來說,in_array()也是用了迴圈逐個比較的方法。而前幾期我們說了,’php在路上’==true,’php在路上’==0這兩個是成立的。
看了網上,有人使用for來判斷。
php是弱類型語言,對變數的定義和使用不是嚴格,多數的“坑”都是來源於這一點。不過,這個“坑”php語言表示不背這個坑,in_array()函數表示委屈。
這是使用者對in_array()的用法沒好好看手冊的原因,看手冊:
函數:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
參數:
needle:要尋找的值。
haystack:尋找的數組
strict:是否嚴格匹配,TRUE 或者 FALSE
傳回值
如果找到 needle 則返回 TRUE,否則返回 FALSE。
重點來了,關鍵在第三個參數:strict,如果為TRUE,會先比較類型再比較值。預設為false,false,false,false……原因在這!
so,在使用in_array()函數的時候別省略第三個參數。
三、防坑擴充
1、在in_array()函數中,needle參數是區分大小寫。
2、有時候在數組搜尋給定的值時,如果還想知道給定值所在的索引,那就會用到array_search()函數。這個函數也是有第三個參數的,也是表示是否嚴格匹配。
另外,由於array_search()函數返回的是給定值所在的索引,所以傳回值可能是0或者false,所以在後續的判斷是否存在給定值的時候,要使用“===”來判斷。
如:
$arr = [‘12‘,13,‘php在路上‘];
echo array_search(‘12‘,$arr,true)===false ? ‘沒找到‘ : ‘找到了‘;
四、防坑互動
看代碼:
$arr = [‘php在路上‘,12,‘‘,[‘我是字串‘]];
echo in_array([0],$arr) ? 1 : 0;
現在大家清楚為什麼在調用in_array()時出錯了吧,那麼在以後的編碼中一定要注意了,如果還是存在不理解的地方或者有其他方面開發疑問的話,都是可以留言諮詢擷取協助的。
本文由專業的鄭州app開發公司燚軒科技整理髮布,原創不易,轉載請註明出處及作者。
php編程中如何避免調用in_array()函數出錯問題