对于php中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等php原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结
直接上代码吧!
代码如下:
$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$k = $i;
for($j=$i+1; $jif ($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 return false;
}
for($i=0; $ifor($j=$count-1; $j>$i; $j--){
if ($array[$j] $tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
/*
* 快速排序(一维数组)
*
*/
function quicksort($array){
if (count($array) return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $iif ($array[$i] $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{
$arrkeymap[$key] = $key;
}
//对值进行排序
for($i=0;$i{
for($j = $count-1; $j>$i;$j--)
{
//$bol = $strorder == 'asc' ? $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的基础类中来进行。