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

本文详细介绍了PHP的array_multisort函数,用于对多维数组进行排序,特别是针对Yii2框架下如何指定多个字段进行排序。通过示例展示了如何利用func_get_args动态获取参数,实现灵活的多字段排序功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文涉及关键函数(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值