zoukankan      html  css  js  c++  java
  • PHP二维数组排序

    一、

    1.

    $arrays   要排序的数组

    $sort_key 根据排序的key

    $sort_order 升序降序    SORT_ASC/SORT_DESC

    $sort_type 排序key类型 SORT_NUMERIC/SORT_STRING

    返回值:重新排列后的数组

    function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){
    if(is_array($arrays)){
    foreach ($arrays as $array){
    if(is_array($array)){
    $key_arrays[] = $array[$sort_key];
    }else{
    return false;
    }
    }
    }else{
    return false;
    }
    array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
    return $arrays;
    }
    2.
    //$array 要排序的数组
    //$row 排序依据列
    //$type 排序类型[asc or desc]
    //return 排好序的数组
    function array_sort($array,$row,$type){
    $array_temp = array();
    foreach($array as $v){
    $array_temp[$v[$row]] = $v;
    }
    if($type == 'asc'){
    ksort($array_temp);
    }elseif($type='desc'){
    krsort($array_temp);
    }else{
    }
    return array_values($array_temp);
    }
    二、
    $arr = array(
        0=>array('id'=>5,'name'=>'小明','num'=> 14),
        1=>array('id'=>5,'name'=>'小李','num'=>52),
        2=>array('id'=>4,'name'=>'小花','num'=>36),
        3=>array('id'=>6,'name'=>'小李','num'=>14)
    );

    采用php中的func_get_args函数,来动态获取传入的值,解决多字段排序。实现如下:

    /**
         * 多维数组指定多字段排序
         * 排序:SORT_ASC升序 , SORT_DESC降序
         * 示例:$this->multiaArraySort($arr, 'num', SORT_DESC, 'sort', SORT_ASC)
         * @return array
         */
        public function multiaArraySort()
        {
            $funcArgs = func_get_args();
            if(empty($funcArgs)){
                return null;
            }
            $arr = array_shift($funcArgs);
            if(!is_array($arr)){
                throw new Exception('第一个参数必须为数组');
            }
            foreach($funcArgs as $key => $value){
                if(is_string($value)){
                    $tempArr = array();
                    foreach($arr as $k=> $v){
                        $tempArr[$k] = $v[$value];
                    }
                    $funcArgs[$key] = $tempArr;
                }
            }
            $funcArgs[] = &$arr;
            call_user_func_array('array_multisort', $funcArgs);
            return array_pop($funcArgs);
        }
    
       // 执行
       $arr = $this->multiaArraySort($arr, 'id', SORT_DESC, 'num', SORT_DESC);
       var_dump($arr);

    运行结果如下:

    array (size=4)
      0 => 
        array (size=3)
          'id' => int 6
          'name' => string '小李' (length=6)
          'num' => int 14
      1 => 
        array (size=3)
          'id' => int 5
          'name' => string '小李' (length=6)
          'num' => int 52
      2 => 
        array (size=3)
          'id' => int 5
          'name' => string '小明' (length=6)
          'num' => int 14
      3 => 
        array (size=3)
          'id' => int 4
          'name' => string '小花' (length=6)
          'num' => int 36
  • 相关阅读:
    【树论】新二叉树
    【贪心】umi的函数
    【模拟】高精度练习之加法
    【模拟】高精度练习之减法
    【贪心】线段覆盖
    【树论】二叉树的序遍历
    【贪心】超级书架
    【动态规划】爱与愁的心痛
    【图论】牛大赛
    【图论】产生数
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/5970330.html
Copyright © 2011-2022 走看看