function odd($var) { return($var & 1); } function even($var) { return(!($var & 1)); } $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array(6, 7, 8, 9, 10, 11, 12); echo "Odd :n"; print_r(array_filter($array1, "odd")); echo "Even:n"; print_r(array_filter($array2, "even")); 過濾掉PHP數組中的重複值 去除一個數組中的重複值,可以使用foreach方法,也可以使用array_unique方法,下面的代碼兩種方法都使用了 代碼如下 | 複制代碼 | $arrF = array(); $arrS = array(); $intTotal = 100; $intRand = 10; for($i=0; $i < $intTotal; $i ) { $arrF[] = rand(1, $intRand); $arrS[] = rand(1, $intRand); } $arrT = array_merge($arrF, $arrS); $arrRF = array(); $intStart = time(); foreach($arrT as $v) { if(in_array($v, $arrRF)) { continue; } else { $arrRF[] = $v; } } $intEnd = time(); $intTime = $intEnd-$intStart; echo "With Continue,Spend time:$intTime "; $intStart1 = time(); $arrRS = array_unique($arrT); $intEnd2 = time(); $intTime2 = $intEnd2-$intStart1; echo "With array_unique function,Spend time:($intTime2)"; echo " "; print_r($arrT); print_r($arrRF); print_r($arrRS); echo " "; ?> 在$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函數 代碼如下 | 複制代碼 | function unique_arr($array2D,$stkeep=false,$ndformat=true) { // 判斷是否保留一級數組鍵 (一級數組鍵可以為非數字) if($stkeep) $stArr = array_keys($array2D); // 判斷是否保留二級數組鍵 (所有二級數組鍵必須相同) if($ndformat) $ndArr = array_keys(end($array2D)); //降維,也可以用implode,将一維數組轉換為用逗号連接配接的字元串 foreach ($array2D as $v){ $v = join(",",$v); $temp[] = $v; } //去掉重複的字元串,也就是重複的一維數組 $temp = array_unique($temp); //再将拆開的數組重新組裝 foreach ($temp as $k => $v) { if($stkeep) $k = $stArr[$k]; if($ndformat) { $tempArr = explode(",",$v); foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval; } else $output[$k] = explode(",",$v); } return $output; } 測試 $array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333')); print_r($array2D); print_r(unique_arr($array2D,true)); | | |