php中数组的交集,并集,以及去除数组的重复项,以及从小到大排序程序
代码如下 | 复制代码 |
<?php //两个数组的并集 $arr1 = array('a','b','c','d','e','f'); //$arr2 = array('a','a','e','a','p','a','a','e'); $arr2 = array('a','a','a','a'); $ilength = count($arr1); $jlength = count($arr2); /** * 两个数组的交集 * @param array $arr1 * @param array $arr2 * @autho zhaoya * @return array $arr */ function jiaoji($arr1,$arr2) { $ilength = count($arr1); $jlength = count($arr2); for($i=0;$i<$jlength;$i++) { for($j=0;$j<$ilength;$j++) { if($arr2[$i] == $arr1[$j]) { $arr[] = $arr2[$i]; break; } } } return $arr; } $arr3 = array(1,10,10,5,90,50,90); $arr4 = array(10,23,50,100,110,80); echo '<pre>'; $time1 = microtime(); /*$arr3 = __deleterepeat($arr3); $arr4 = __deleterepeat($arr4); $arr5 = bingji($arr3,$arr4); $arrsort = sort_array($arr5);*/ ///经过实验证明 先并集,然后在去除重复值 ,再排序,这样的速度会快一些 ///而先删除 两个数组的重复值,在并集,在排序的话,这样的速度慢点 $arr5 = bingji($arr3,$arr4); $arr5 = __deleterepeat($arr5); $arrsort = sort_array($arr5); $time2 = microtime(); echo $time1,'<hr>'; echo $time2,'<hr>'; echo $time2-$time1; print_r($arrsort); //去除重复值(第一种方法) //__deleterepeat($arr2); /** * 去除重复值(第一种方法) * @param array $array * @return array $tmparr * @author zhaoya */ function __deleterepeat($array) { $count = count($array); for($i = 0;$i<$count;$i++) { $change = false; for($j=$i+1;$j<$count;$j++) { if($array[$i] == $array[$j]) { $change=true; break; } } if($change==false) { $tmparr[] = $array[$i]; } } return $tmparr; } //去除重复的值 第二种方法 $arrayshift = _delrepeat($arr2); $tmparray=array(); /*** * 去除一维数组重复的值 * @param array $arr * @return array $tmparray; * @author zhaoya */ function _delrepeat($arr) { for($i=0;$i<count($arr);$i++) { if(inarray($arr[$i],$tmp)) { $tmparray[] = $arr[$i]; } } return $tmparray; } /** * 查找变量是否在这个数组里面 * @param integer $num * @param array $arr * @author zhaoya * @return boolean * */ function inarray($num,$arr) { if($arr) { for($i=0;$i<count($arr);$i++) { if($arr[$i] == $num) { return false; } return true; } } return true; } /** * 两个数组的并集 * @param array $arr1 数组1 * @param array $arr2 数组2 * @author zhaoya * @return array $arr1 */ function bingji($arr1,$arr2) { $ilength = count($arr1); $jlength = count($arr2); for($i=0;$i<$jlength;$i++) { $change=false; for($j=0;$j<$ilength;$j++) { if($arr2[$i] == $arr1[$j]) { $change = true; break; } } if($change == false) { $arr1[] = $arr2[$i]; } } return $arr1; } /** * 数组排序 从小到大 * @param array $arr 数组 * @author zhaoya * @return array $arr */ function sort_array($arr) { $length = count($arr); for($i=0;$i<$length;$i++) { for($j=$i+1;$j<$length;$j++) { if($arr[$i] > $arr[$j]) { $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; } } } return $arr; } ?> |
补充:Php教程,Php常用代码