php排序

作者: 我的楼兰0909 | 来源:发表于2018-12-10 09:57 被阅读0次
    /**
     * 二维数组按某个字段排序
     * @param $arr
     * @param $field
     * @param int $type SORT_ASC从小到大 SORT_DESC从大到小
     * 另外常用的几个排序函数为 sort rsort asort arsort
     */
    function field_sort(&$arr,$field,$type=SORT_DESC){
        $columns = array_column($arr,$field);
        array_multisort($columns,$type,$arr);//根据金额大小降序排列
    }
 
    /*
    * 普通排序
    * $array为要排序的数组
    * $keys为要用来排序的键名
    * $type默认为升序排序
    */
    function array_sort($array, $keys, $type = 'asc')
    {
        $keysvalue = $new_array = array();
        foreach ($array 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] = $array[$k];
        }
        return $new_array;
    }
 
 
    /**
     * 冒泡排序
     * @param $arr
     * @param string $type ASC从小到大 DESC从大到小
     * @return mixed
     */
    function sorts($arr,$type='ASC'){
        $len = count($arr);
        for($i=0; $i < $len-1; $i++){
            for($j=0; $j < $len-$i-1; $j++){
                if($type=='ASC'){
                    if($arr[$j] > $arr[$j+1]){
                        swap($arr,$j);
                    }
                }else{
                    if($arr[$j] < $arr[$j+1]){
                        swap($arr,$j);
                    }
                }
            }
        }
        return $arr;
    }
 
    /**
     * 快速排序
     * @param $arr
     * @param string $type ASC从小到大 DESC从大到小
     * @return array
     */
    function quick_sort($arr, $type='ASC'){
        $len = count($arr);
        if($len <=1){
            return $arr;
        }
        $left = $right = [];
        $mid_index = $len>>1;
        $mid_value = $arr[$mid_index];
        for($i=0; $i < $len; $i++){
            if($i == $mid_index){
                continue;
            }
            if($type == 'ASC'){
                if($arr[$i] < $mid_value){
                    $left[] = $arr[$i];
                }else{
                    $right[] = $arr[$i];
                }
            }else{
                if($arr[$i] > $mid_value){
                    $left[] = $arr[$i];
                }else{
                    $right[] = $arr[$i];
                }
            }
        }
        return array_merge(quick_sort($left,$type),[$mid_value],quick_sort($right,$type));
    }
 
    /**
     * 交换两个值
     * @param $arr
     * @param $k
     */
    function swap(&$arr,$k){
        $temp = $arr[$k+1];
        $arr[$k+1] = $arr[$k];
        $arr[$k] = $temp;
    }
 
    /**
     * 归并排序
     * @param $arr
     * @return array
     */
    function merge_sort($arr){
        $len = count($arr);
        if($len<=1){
            return $arr;
        }
        $half = ($len>>1)+($len & 1);
        $arr2d = array_chunk($arr,$half);
        $left = merge_sort($arr2d[0]);
        $right = merge_sort($arr2d[1]);
        while(count($left) && count($right)){
            if($left[0] < $right[0]){
                $reg[] = array_shift($left);
            }else{
                $reg[] = array_shift($right);
            }
        }
        return array_merge($reg,$left,$right);
 
    }

相关文章

网友评论

      本文标题:php排序

      本文链接:https://www.haomeiwen.com/subject/kaezcqtx.html