PHP数组排序算法小结
程序员文章站
2022-05-17 15:01:12
...
PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结。
/* * 插入排序(一维数组) * 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。 */ function insertSort($arr){ if(!is_array($arr) ||count($arr)==0){ return $arr; } $count =count($arr); for($i=1;$i$tmp){//如果前面一个比后面一个大, 这里是从小到大 $arr[$j+1] =$arr[$j];//把小的元素和前面的对换,直到移动到合适的位置,在移动下一个 $arr[$j] =$tmp; $j--; } } } return $arr; } /* * 选择排序(一维数组) * 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 */ function selectSort($arr){ if(!is_array($arr) ||count($arr) == 0) { return $arr; } $count =count($arr); for($i=0;$i$arr[$j]) $k =$j;//找出最小的 if ($k !=$i){ $tmp =$arr[$i]; $arr[$i] =$arr[$k]; $arr[$k] =$tmp; } } } return $arr; } /* * 冒泡排序(一维数组) * 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止 */ function bubbleSort($array){ $count =count($array); if ($count $i;$j--){ if ($array[$j] $val) { $arrKey[] =$key; $arrVal[] =$val; } $count =count($arrVal); if($count) { //创建key的顺序数组 for($key=0;$key$i;$j--) { //$arrVal[$j-1]; if($bol){ $tmp =$arrVal[$j]; $arrVal[$j] =$arrVal[$j-1]; $arrVal[$j-1] =$tmp; //值的冒泡排序,引起key的数组的交互 $keytmp =$arrKeyMap[$j]; $arrKeyMap[$j] =$arrKeyMap[$j-1]; $arrKeyMap[$j-1] =$keytmp; } } } if(count($arrKeyMap)) { foreach ($arrKeyMap as $val) { $arrReturn[] =$arrKey[$val]; } } return $arrReturn; } } /** * 使用原生的函数进行数组按照值进行排列 */ function arraySortByVal($arr,$keys,$type='asc'){ $keysvalue =$new_array =array(); foreach ($arr as $k=>$v){ $keysvalue[$k] =$v[$keys]; } if($type =='asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[$k] =$arr[$k]; } return $new_array;
对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。
上一篇: 关于图片防盗链有关问题
下一篇: 网页过期有关问题求解决