php編程中如何避免調用in_array()函數出錯問題
一、前方有坑
直接上代碼:
$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()函數出錯問題