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

首頁 > 語言 > PHP > 正文

php 數組過濾函數 array_filter與array_unique

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

在php中我給大家介紹兩個比較常用的數組過濾函數array_filter與array_unique了,一個是過濾數組空值,一個是過濾數組重復值,我們現在一起來看看。

語法:array_filter(array,function)

array  必需,規定輸入的數組,function 自定義函數的名稱,為空時過濾掉所有值為flase的元素,代碼如下:

  1. <?php  
  2.    
  3. function odd($var) {  
  4.     return($var & 1);  
  5. }  
  6.    
  7. function even($var) {  
  8.     return(!($var & 1));  
  9. }  
  10.    
  11. $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);  
  12. $array2 = array(6, 7, 8, 9, 10, 11, 12);  
  13.    
  14. echo "Odd :n";  
  15. print_r(array_filter($array1"odd"));  
  16. echo "Even:n";  
  17. print_r(array_filter($array2"even"));  
  18. /*  
  19.    
  20. Odd :  
  21. Array  
  22.  
  23.      
  24. [a] => 1  
  25.      
  26. [c] => 3  
  27.      
  28. [e] => 5  
  29.  
  30. Even:  
  31. Array  
  32.  
  33.      
  34. [0] => 6  
  35.      
  36. [2] => 8  
  37.      
  38. [4] => 10  
  39.      
  40. [6] => 12  
  41.  
  42. */ 

過濾掉PHP數組中的重復值,去除一個數組中的重復值,可以使用foreach方法,也可以使用array_unique方法,下面的代碼兩種方法都使用了,代碼如下:

  1. <?php 
  2. $arrF = array(); 
  3. $arrS = array(); 
  4. $intTotal = 100; 
  5. $intRand = 10; 
  6. for($i=0; $i < $intTotal$i++) 
  7.  $arrF[] = rand(1, $intRand); 
  8.  $arrS[] = rand(1, $intRand); 
  9. $arrT = array_merge($arrF$arrS); 
  10. $arrRF = array(); 
  11. $intStart = time(); 
  12. foreach($arrT as $v
  13.  if(in_array($v$arrRF)) 
  14.  { 
  15.   continue
  16.  } 
  17.  else 
  18.  { 
  19.   $arrRF[] = $v
  20.  } 
  21. $intEnd = time(); 
  22. $intTime = $intEnd-$intStart
  23. echo "With Continue,Spend time:$intTime<br/>"
  24. $intStart1 = time(); 
  25. $arrRS = array_unique($arrT); 
  26. $intEnd2 = time(); 
  27. $intTime2 = $intEnd2-$intStart1
  28. echo "With array_unique function,Spend time:($intTime2)"
  29. echo "<pre>"
  30. print_r($arrT); 
  31. print_r($arrRF); 
  32. print_r($arrRS); 
  33. echo "</pre>"
  34. ?> 

在$intTotal比較小的情況下,比如說1000以內,$intRand的取值基本不影響結果,兩者執行的時間都差不多。

測試$intTotal 大于10000時,$intRand取值100時,使用array_unique的效率要高于foreach循環判斷,$intRand=10,兩者執行時間一致。

因此,可以得出結論,當數組容量不大,大概在1000以內時,使用兩者的執行效率差不多,當數組容量比較大時(具體應該到什么值,我沒有詳細測試,感興趣的可以確定一下這個值),隨著$intRand的逐漸增大,array_unique的表現更好,我不使用$intTotal/$intRand這個比值,是因為,感覺并不是成比例變化,但是基本會遵循比值越大,array_unique表現越好。

綜上所述,在過濾數組重復值的時候,建議使用array_unuique,數組不大的時候兩者效率等同,而array_unique使用當然讓你的代碼一下子減了好幾行,數組容量過大時,函數的表現更好

二維數組去重復項函數

PHP數組去除重復項 有個內置函數array_unique (),但是php的 array_unique函數只適用于一維數組,對多維數組并不適用,以下提供一個二維數組 的 array_unique函數,代碼如下:

  1. function unique_arr($array2D,$stkeep=false,$ndformat=true) 
  2.  // 判斷是否保留一級數組鍵 (一級數組鍵可以為非數字) 
  3.  if($stkeep$stArr = array_keys($array2D); 
  4.  // 判斷是否保留二級數組鍵 (所有二級數組鍵必須相同) 
  5.  if($ndformat$ndArr = array_keys(end($array2D)); 
  6.  //降維,也可以用implode,將一維數組轉換為用逗號連接的字符串 
  7.  foreach ($array2D as $v){ 
  8.   $v = join(",",$v);  
  9.   $temp[] = $v
  10.  } 
  11.  //去掉重復的字符串,也就是重復的一維數組 
  12.  $temp = array_unique($temp); 
  13.  //再將拆開的數組重新組裝 
  14.  foreach ($temp as $k => $v
  15.  { 
  16.   if($stkeep$k = $stArr[$k]; 
  17.   if($ndformat
  18.   { 
  19.    $tempArr = explode(",",$v);  
  20.    foreach($tempArr as $ndkey => $ndval$output[$k][$ndArr[$ndkey]] = $ndval
  21.   } 
  22.   else $output[$k] = explode(",",$v);  
  23.  } 
  24.  return $output
  25. 測試 
  26. $array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333')); 
  27.  
  28. print_r($array2D); 
  29. print_r(unique_arr($array2D,true)); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐城市| 莎车县| 奇台县| 北宁市| 磐石市| 昔阳县| 营口市| 松滋市| 北海市| 东港市| 佛冈县| 保靖县| 同江市| 射洪县| 德清县| 桐梓县| 天等县| 巴楚县| 新昌县| 阜新| 赣榆县| 忻城县| 西林县| 沂南县| 德令哈市| 修水县| 固安县| 崇礼县| 江西省| 枣庄市| 文成县| 巩留县| 耒阳市| 琼中| 隆尧县| 衡阳市| 浑源县| 海晏县| 宜宾市| 长丰县| 秦安县|