国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

2個自定義的PHP in_array 函數,解決大量數據判斷in_array的效率問題

2024-09-04 11:43:22
字體:
來源:轉載
供稿:網友

大家可能都用過in_array來判斷一個數據是否在一個數組中,一般我們的數組可能數據都比較小,對性能沒什么影響,所以也就不會太在意。

但是如果數組比較大的時候,性能就會下降,運行的就會久一點,那如果針對在大數組情況下做優化呢,下面說兩種方法(都是通過自定義函數來實現):

1.數組key與value翻轉,通過isset判斷key是否存在于數組中,代碼如下:

  1. /** 
  2.  * in_array is too slow when array is large 
  3.  */ 
  4. public static function inArray($item$array) { 
  5.     $flipArray = array_flip($array); 
  6.     return isset($flipArray[$item]); 

大家可能也會問為什么不用 array_key_exists 來做判斷二用isset呢? 下面看下array_key_exists() 與 isset() 的對比:

isset()對于數組中為NULL的值不會返回TRUE,而array_key_exists()會,代碼如下:

  1. <?php 
  2. $search_array = array('first' => null, 'second' => 4); 
  3.  
  4. // returns false 
  5. isset($search_array['first']); 
  6.  
  7. // returns true 
  8. array_key_exists('first'$search_array); 
  9. ?> 

2.用implode連接,直接用strpos判斷

用implode函數+逗號連起來,直接用strpos判斷。php里面字符串取位置速度非常快,尤其是在大數據量的情況下。不過需要注意的是首尾都要加”,” ,這樣比較嚴謹。如: ,user1,user2,user3, 查找的時候,查,user1,。還有strpos要用!== false,因為第一個會返回0。示例如下:

  1. /** 
  2.  * in_array is too slow when array is large 
  3.  */ 
  4. public static function inArray($item$array) { 
  5.     $str = implode(','$array); 
  6.     $str = ',' . $str . ','
  7.     $item = ',' . $item . ','
  8.     return false !== strpos($item$str) ? true : false; 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麦盖提县| 新津县| 河南省| 房产| 电白县| 古蔺县| 沛县| 石台县| 绥中县| 安多县| 张家口市| 嘉兴市| 衡东县| 永州市| 潼南县| 海口市| 建始县| 莱芜市| 岑巩县| 赤壁市| 七台河市| 岗巴县| 潞城市| 香格里拉县| 美姑县| 同德县| 中阳县| 柘荣县| 黔西县| 临武县| 西宁市| 彭州市| 祁门县| 枞阳县| 哈巴河县| 雅江县| 晋江市| 金川县| 内江市| 龙陵县| 大渡口区|