深圳PHP培训
达内深圳罗湖中心

185-8886-4961

热门课程

【深圳PHP培训机构】PHP的排序算法

  • 时间:2017-08-30
  • 发布:深圳PHP培训
  • 来源:达内新闻

深圳PHP培训机构】PHP的排序算法

对付PHP中对数组的元素进行排序,这个是很常常用到的,以前的项目中也有,并且对付几种排序咱们都是用的是asort arsort 等PHP原生函数,没有本身去实现,以是就对一下的几个函数进行总结,这个会赓续的进行弥补,本身也能够好好的复习和总结

<?php/*
* 拔出排序(一维数组)
* 每次将一个待排序的数据元素,拔出到前面曾经排好序的数列中的恰当的地位,使数列仍然有序;直到待排序的数据元素全体拔出实现为止。
*/function insertSort($arr){if(!is_array($arr) || count($arr)==0){return $arr;
}$count = count($arr);for($i=1; $i<$count; $i++){if(isset($arr[$i])){
$tmp = $arr[$i]; //获得后一个元素的值   $j = $i - 1; //获得前面的下标   while($arr[$j] > $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<$count; $i++){$k = $i;for($j=$i+1; $j<$count; $j++){
if ($arr[$k] > $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 <= 0) {return false;
}for($i=0; $i<$count; $i++){for($j=$count-1; $j>$i; $j--){
if ($array[$j] < $array[$j-1]){ //比拟找到的数进行互换    $tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}return $array;
}
/*
* 疾速排序(一维数组)
*
*/function quickSort($array){if (count($array) <= 1){return $array;
}$key = $array[0];$left_arr = array();$right_arr = array();for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key){
$left_arr[] = $array[$i];
}else{
$right_arr[] = $array[$i];
}
}$left_arr = quickSort($left_arr);$right_arr = quickSort($right_arr);return array_merge($left_arr, array($key), $right_arr);
}/**
* 依照元素的值进行排序
* strOrder 为分列的顺序 asc 升序 desc 降序
*/function sortByVal($arr,$strOrder='asc'){if(!is_array($arr) || count($arr)==0)
{return $arr;
}$arrReturn = array();foreach($arr as $key=>$val)
{$arrKey[] = $key;$arrVal[] = $val;
}$count = count($arrVal);if($count)
{//创立key的顺序数组for($key=0;$key<$count;$key++)
{$arrKeyMap[$key] = $key;
}//对值进行排序for($i=0;$i<$count;$i++)
{for($j = $count-1; $j>$i;$j--)
{//<从小到大分列 起落在这改动$bol = $strOrder == 'asc' ? $arrVal[$j]<$arrVal[$j-1] : $arrVal[$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的根基类中来进行。

想知道更多关于IT行业的信息吗?想远远不如行动,行动起来,一起加入达内,一起进入IT行业,跟着达内的脚步,一起走进如今的互联网信息时代,带给你不一样的色彩生活——【深圳PHP培训

深圳达内

上一篇:【深圳PHP培训班】PHP后端该如何组织项目结构
下一篇:【深圳PHP培训机构】sae使用smarty模板的方法

【深圳PHP培训机构】如何用PHP将长文章分页?

【深圳PHP培训机构】sae使用smarty模板的方法

【深圳PHP培训机构】PHP的排序算法

【深圳PHP培训机构】PHP中什么是PHP面对对象

选择城市和中心
贵州省

广西省

海南省

台湾