入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

yii2 多维数组指定多字段排序

创建时间:2017-12-15 投稿人: 浏览次数:283

本文涉及关键函数(array_multisort)介绍


(PHP 4, PHP 5, PHP 7)
array_multisort — 对多个数组或多维数组进行排序

说明:

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引

参数:
array1
要排序的 array。

array1_sort_order
之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。
此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。

实现多维数组的指定多个字段排序


如何实现多维数组指定多个字段来对数组进行排序?
示例如下:

$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
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。