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

來源:互聯網
上載者:User

標籤:公司   源碼   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()函數出錯問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.