1. 程式人生 > >php編程中如何避免調用in_array()函數出錯問題

php編程中如何避免調用in_array()函數出錯問題

小寫 bool php開發 編碼 發布 都是 類型 科技 匹配

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()函數出錯問題