亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php數組交集判斷與優化程序代碼

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

昨天我有一個功能是需要判斷生成的多個數組交集,也就是要判斷這些數組中是否存在交集了,下面我來給各位同學介紹php數組交集判斷程序代碼實例,有需要的朋友可參考.

需要判斷兩個數組是否有交集,第一個感覺PHP中應該有這個函數,果然:

array array_intersect(array array1,array array2[,arrayN…])

返回N個數組中的交集元素,如果是關聯數組可以用:array_intersect_assoc()

PHP案例如下:

數組的交集 array_intersect()

array_intersect()函數返回一個保留了鍵的數組,這個數組只由第一個數組中出現的且在其他每個輸入數組中都出現的值組成,其形式如下:

  1. <?php 
  2. $fruit1 = array("Apple","Banana","Orange"); 
  3. $fruit2 = array("Pear","Apple","Grape"); 
  4. $fruit3 = array("Watermelon","Orange","Apple"); 
  5. $intersection = array_intersect($fruit1$fruit2$fruit3); 
  6. print_r($intersection); 
  7. // 輸出 Array ( [0] => Apple ) 
  8. ?> 

我的應用如下:

  1. if($user->role != 1){ 
  2.             $count = count($projects); 
  3.             for($i=0;$i<$count;$i++){ 
  4.                 if(!array_intersect(explode(','$projects[$i]['role']),  explode(','$projects[$i]['next_approve_role']))){ 
  5.                     unset($projects[$i]); 
  6.                     continue
  7.                 } 
  8.             } 
  9.  } 

關聯數組的交集array_intersect_assoc(),代碼如下:

  1. <?php 
  2. $fruit1 = array("red"=>"Apple","yellow"=>"Banana","orange"=>"Orange"); 
  3. $fruit2 = array("yellow"=>"Pear","red"=>"Apple","purple"=>"Grape"); 
  4. $fruit3 = array("green"=>"Watermelon","orange"=>"Orange","red"=>"Apple"); 
  5. $intersection = array_intersect_assoc($fruit1$fruit2$fruit3); 
  6. print_r($intersection); 
  7. // output 
  8. // Array ( [red] => Apple ) 
  9. ?> 

數組交集的優化,假定每個參數會包含一千個左右的產品ID(int),以此為前提來模擬生成一些數據,代碼如下:

  1. <?php 
  2. $rand = function() { 
  3.     $result = array(); 
  4.     for ($i = 0; $i < 1000; $i++) { 
  5.         $result[] = mt_rand(1, 10000); 
  6.     } 
  7.     return $result
  8. }; 
  9. $param_a = $rand(); 
  10. $param_b = $rand(); 
  11. ?> 

注意:如果測試數據集過小的話,結論可能會出現不一致,先看看通過PHP內置方法array_intersect實現的性能,代碼如下:

  1. <?php 
  2. $time = microtime(true); 
  3. $result = array_intersect($param_a$param_b); 
  4. $time = microtime(true) - $time
  5. echo "array_intersect: {$time}n"
  6. ?> 

在優化之前,我們先來看看array_intersect一些特殊的地方,代碼如下:

  1. <?php 
  2. $param_a = array(1, 2, 2); 
  3. $param_b = array(1, 2, 3); 
  4. var_dump( 
  5.     array_intersect($param_a$param_b), 
  6.     array_intersect($param_b$param_a
  7. ); 
  8. ?> 
  9. array_intersect($param_a$param_b): 1, 2, 2  
  10. array_intersect($param_b$param_a): 1, 2  

也就是說,如果在第一個數組參數中有重復元素的話,則array_intersect會返回所有滿足條件的重復元素,改寫array_intersect的時候最好兼容這些功能.

下面看看通過自定義方法int_array_intersect實現的性能,代碼如下:

  1. <?php 
  2. function int_array_intersect() 
  3.     if (func_num_args() < 2) { 
  4.         trigger_error('param error', E_USER_ERROR); 
  5.     } 
  6.     $args = func_get_args(); 
  7.     foreach ($args AS $arg) { 
  8.         if (!is_array($arg)) { 
  9.             trigger_error('param error', E_USER_ERROR); 
  10.         } 
  11.     } 
  12.     $intersect = function($a$b) { 
  13.         $result = array(); 
  14.         $length_a = count($a); 
  15.         $length_b = count($b); 
  16.         for ($i = 0, $j = 0; $i < $length_a && $j < $length_b; null) { 
  17.             if($a[$i] < $b[$j] && ++$i) { 
  18.                 continue
  19.             } 
  20.             if($a[$i] > $b[$j] && ++$j) { 
  21.                 continue
  22.             } 
  23.             $result[] = $a[$i]; 
  24.             if (isset($a[$next = $i + 1]) && $a[$next] != $a[$i]) { 
  25.                 ++$j
  26.             } 
  27.             ++$i
  28.         } 
  29.         return $result
  30.     }; 
  31.     $result = array_shift($args); 
  32.     sort($result); 
  33.     foreach ($args as $arg) { 
  34.         sort($arg); 
  35.         $result = $intersect($result$arg); 
  36.     }//開源代碼Vevb.com 
  37.     return $result
  38. $time = microtime(true); 
  39. $result = int_array_intersect($param_a$param_b); 
  40. $time = microtime(true) - $time
  41. echo "int_array_intersect: {$time}n"
  42. ?> 

直覺上,我們肯定會認為內置函數快于自定義函數,但本例中結果恰恰相反:

array_intersect: 0.023918151855469

int_array_intersect: 0.0026049613952637

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频26uuu| 国内精品小视频在线观看| 成人福利网站在线观看11| 日韩中文字幕网| 国产成人在线亚洲欧美| 久久综合伊人77777尤物| 91精品视频在线播放| 91成人天堂久久成人| 成人黄在线观看| 亚洲人成电影网站色xx| 欧美丝袜一区二区三区| 久久精品国产91精品亚洲| 成人黄色激情网| 性视频1819p久久| 国产精品99久久久久久久久久久久| 欧美成年人视频网站| 91免费高清视频| 亚洲福利视频免费观看| 久久男人的天堂| 丝袜美腿精品国产二区| 久久亚洲欧美日韩精品专区| 国产在线观看一区二区三区| 久久久国产一区| 欧美美最猛性xxxxxx| 亚洲第一色中文字幕| 久久久久久久电影一区| 国产视频综合在线| 亚洲欧美激情另类校园| 欧美在线视频在线播放完整版免费观看| 国产精品视频白浆免费视频| 韩国v欧美v日本v亚洲| 欧美亚洲日本网站| 日韩黄色高清视频| 欧美电影免费观看高清完整| 亚洲国产另类 国产精品国产免费| 国产欧美亚洲视频| 97视频在线观看免费高清完整版在线观看| 欧美性极品少妇精品网站| 久久av资源网站| 亚洲精品一区二区三区婷婷月| 日韩高清电影免费观看完整| 亚洲女同精品视频| 九色精品美女在线| 亚洲欧洲日本专区| 国产精品一二三视频| 亚洲欧洲午夜一线一品| 日韩欧美综合在线视频| 日韩欧美成人免费视频| 国产在线观看一区二区三区| 亚洲在线免费看| 国产一区二区丝袜高跟鞋图片| 91成人在线观看国产| 日日骚久久av| 日韩欧美在线中文字幕| 国产成人jvid在线播放| 国产亚洲成av人片在线观看桃| 欧美日韩亚洲激情| 伊人成人开心激情综合网| 亚洲欧美一区二区激情| 中文字幕日韩av综合精品| 成人乱色短篇合集| 亚洲bt天天射| 欧美极品美女电影一区| 欧美在线视频一区二区| 国产精品第七影院| 91沈先生作品| 色婷婷综合久久久久中文字幕1| 热久久视久久精品18亚洲精品| 国产一区二区三区网站| 亚洲精品久久久久久久久久久久| 91色视频在线导航| 欧美中文字幕在线播放| 色哟哟网站入口亚洲精品| 国产视频精品va久久久久久| 91欧美精品成人综合在线观看| 精品五月天久久| 日韩av大片在线| 日本精品免费一区二区三区| 日韩一区二区精品视频| 欧美电影免费看| 国产欧美亚洲精品| 亲爱的老师9免费观看全集电视剧| 亚洲天堂男人的天堂| 亚洲最大的成人网| 亚洲女人被黑人巨大进入| 欧美精品videosex性欧美| 成人国产在线激情| 久久久久久久香蕉网| 国产午夜精品美女视频明星a级| 国产精品久久久久久久久影视| 国产色视频一区| 国产精品入口日韩视频大尺度| 亚洲一区二区三区毛片| 日韩69视频在线观看| 欧美日韩国产一区在线| 国产网站欧美日韩免费精品在线观看| 日韩免费观看在线观看| 成人黄色av网| 亚洲精品久久久一区二区三区| 欧美性色19p| xxxx欧美18另类的高清| 国产精品高清免费在线观看| 成人午夜小视频| 91色在线视频| 黑人巨大精品欧美一区二区免费| 亚洲午夜未满十八勿入免费观看全集| 一区二区三区精品99久久| 久久福利网址导航| 中文字幕在线视频日韩| 日本成人精品在线| 91热福利电影| 2019日本中文字幕| 久久成人国产精品| 97在线精品国自产拍中文| 国产精品久久久久久久av电影| 久久99精品久久久久久青青91| 国产精品国模在线| 亚洲男女自偷自拍图片另类| 中文字幕亚洲综合久久筱田步美| 一区二区三区在线播放欧美| 91亚洲va在线va天堂va国| 国产精品第二页| 日韩在线视频网站| 成人黄色短视频在线观看| 懂色aⅴ精品一区二区三区蜜月| 中文字幕精品av| 欧美性xxxxx极品娇小| 亚洲区免费影片| 久久久久久久久久久亚洲| 亚洲精品网站在线播放gif| 在线色欧美三级视频| 欧美日韩国内自拍| 国产精品十八以下禁看| 欧日韩不卡在线视频| 国产精品手机播放| 91国在线精品国内播放| 日韩电影中文 亚洲精品乱码| 国产精品一区久久| 亚洲最大福利视频| 97色在线视频观看| 久久精品一本久久99精品| 九九热在线精品视频| 亚洲欧美成人在线| 欧美国产精品人人做人人爱| 成人亚洲综合色就1024| 久久精品国产亚洲一区二区| 精品国产91久久久| 亚洲乱码av中文一区二区| 国产精品国产三级国产专播精品人| 色偷偷88888欧美精品久久久| 国产精品视频白浆免费视频| 国产精品黄色av| 国产一区视频在线播放| 亚洲国产欧美自拍| 欧美一乱一性一交一视频| 精品久久久久久久久久久久久久| 亚洲精品电影久久久| 久久久www成人免费精品张筱雨| 在线色欧美三级视频| 深夜福利一区二区| 一区二区三区视频在线| 精品国产91久久久久久老师| 国产精品99久久久久久久久| 成人网在线免费观看|