search
HomeBackend DevelopmentPHP TutorialPHP数组排序算法小结

PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort  arsort 等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=&#39;asc&#39;)
{
    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 ==&#39;asc&#39; ?$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=&#39;asc&#39;){
    $keysvalue =$new_array =array();
    foreach ($arr as $k=>$v){
        $keysvalue[$k] =$v[$keys];
    }
    if($type ==&#39;asc&#39;){
        asort($keysvalue);
    }else{
        arsort($keysvalue);
    }
    reset($keysvalue);
    foreach ($keysvalue as $k=>$v){
        $new_array[$k] =$arr[$k];
    }
    return $new_array;

 

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。

 


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么对多维数组的某一列求和php怎么对多维数组的某一列求和May 09, 2022 pm 05:55 PM

求和方法:1、用array_column()获取多维数组中指定一列的全部元素,语法“rray_column(数组, '指定列名')”,会返回一个包含全部元素的结果数组;2、用“array_sum(结果数组)”计算结果数组中所有元素的和即可。

php怎么在二维数组末尾增加元素php怎么在二维数组末尾增加元素Apr 26, 2022 pm 06:29 PM

增加元素的方法:1、使用array_push()函数,语法“array_push(二维数组,值1,值2...);”;2、使用array_splice()函数,语法“array_splice(二维数组,count(二维数组),0,元素值)”。

php怎么获取数值在数组中的哪个位置php怎么获取数值在数组中的哪个位置May 07, 2022 pm 09:03 PM

获取方法:1、用“array_values(数组)”将指定数组转为索引数组;2、用“array_search(数值,索引数组)”,在索引数组中搜索数值,返回对应的索引值(下标);3、用“索引值+1”语句获取元素在数组中的位置值。

php数组里面可放数组吗php数组里面可放数组吗May 10, 2022 pm 01:48 PM

php数组里面可以放数组。PHP数组可以存储所有类型的数据,当然也包括数组本身;如果一个数组中的元素是另一个数组,就构成了包含数组的数组,即多维度数组。数组的不同维度标志着需用几个下标(索引)来获取对应的数组元素,比如二维数组需用两个下标。

php数组怎么去掉null值php数组怎么去掉null值May 07, 2022 pm 08:35 PM

方法:1、循环遍历数组,语法“foreach($arr as $k=>$v){}”;2、循环体中,用“==”判断元素值是否为null,如果是则用unset()删除该元素,语法“if($v==null){unset($arr[$k]);}”。

php中只比较值的数组交集函数是什么php中只比较值的数组交集函数是什么Apr 29, 2022 pm 02:41 PM

php中只比较值的数组交集函数是“array_intersect()”;该函数用于比较两个(或更多个)数组的键值,语法“array_intersect(数组1,数组2...)”,会返回一个交集数组,所包含的值是从被比较的数组(数组1)中取。

php数组怎么去掉最大和最小元素php数组怎么去掉最大和最小元素May 09, 2022 pm 08:47 PM

去掉方法:1、用“sort($arr)”对数组进行升序排序,排序后该数组的第一个元素就是最小值,最后一个元素就是最大值;2、用“array_pop($arr)”删除最后一个元素,用“array_shift($arr)”删除第一个元素即可。

php数组怎么去掉最大值和最小值后求平均php数组怎么去掉最大值和最小值后求平均May 10, 2022 pm 02:33 PM

方法:1、对数组进行升序排序,并用“array_pop(数组)”和“array_shift(数组)”去除最大值和最小值;2、用“count(数组)”和“array_sum(数组)”获取数组长度与元素和;3、用“元素和/数组长度”计算平均数。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use