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

来源:互联网 发布:由浅入深vc多线程编程 编辑:程序博客网 时间:2024/06/06 14:21

本文涉及关键函数(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
原创粉丝点击