yii2 ArrayHelper的多维数组排序函数multisort
你想让多维数组排序像SQL语句的order by 一样爽么,那就试试yii2的ArrayHelper::multisort,这货真的挺强大的。当然,PHP自己也有一个array_multisort(),不过今天,我们只说yii2。
public static void multisort ( &$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR )
首先要知道这个函数应用场景是对二维数组按列排序,它不会返回一个新数组,这从第一个参数&$array我们就可以看出,传递的是这个数组的索引,执行函数后,原数组将会被改变。
重点参数为$key,它接收3种形式
第一种:字符串,该类型适合于采用一个列值排序
/** * 我们对数组$arr按照id的大小进行降序排序 */ $arr = [ 0=>['id'=>1,'name'=>'abei'], 1=>['id'=>2,'name'=>'li'], 3=>['id'=>4,'name'=>'wb'], 4=>['id'=>3,'name'=>'world'] ]; ArrayHelper::multisort($arr,'id',SORT_DESC); var_dump($arr); // 获得结果为 array (size=4) 0 => array (size=2) 'id' => int 4 'name' => string 'wb' (length=2) 1 => array (size=2) 'id' => int 3 'name' => string 'world' (length=5) 2 => array (size=2) 'id' => int 2 'name' => string 'li' (length=2) 3 => array (size=2) 'id' => int 1 'name' => string 'abei' (length=4)
第二种:数组,该类型适合于对多个列值进行联合排序,当$key为数组时候,$direction如果为数组,且必须和$key数组长度一致,如果为字符串,则该字符串将作用于所有的$key.
/** * 我们对数组$arr按照id的大小进行降序排序,然后对name进行生序排序 */ $arr = [ 0=>['id'=>1,'name'=>'abei'], 1=>['id'=>1,'name'=>'li'], 3=>['id'=>1,'name'=>'wb'], 4=>['id'=>3,'name'=>'world'] ]; ArrayHelper::multisort($arr,['id','name'],[SORT_DESC,SORT_ASC]); var_dump($arr); // 获得结果为 array (size=4) 0 => array (size=2) 'id' => int 3 'name' => string 'world' (length=5) 1 => array (size=2) 'id' => int 1 'name' => string 'abei' (length=4) 2 => array (size=2) 'id' => int 1 'name' => string 'li' (length=2) 3 => array (size=2) 'id' => int 1 'name' => string 'wb' (length=2)
第三种:自定义函数,当$key为一个函数时候,multisort将以这个函数的返回做作为排序的值,其他参数依旧。
/** * 我们对数组$arr每一个子数组的id==1时,返回w,否则返回b,然后根据返回值进行降序排序 */ $arr = [ 0=>['id'=>1,'name'=>'abei'], 1=>['id'=>1,'name'=>'li'], 3=>['id'=>1,'name'=>'wb'], 4=>['id'=>3,'name'=>'world'] ]; ArrayHelper::multisort($arr,function($item){ if($item['id'] == 1){ return 'w'; }else{ return 'b'; } },SORT_DESC); var_dump($arr); // 获得结果为 array (size=4) 0 => array (size=2) 'id' => int 1 'name' => string 'abei' (length=4) 1 => array (size=2) 'id' => int 1 'name' => string 'li' (length=2) 2 => array (size=2) 'id' => int 1 'name' => string 'wb' (length=2) 3 => array (size=2) 'id' => int 3 'name' => string 'world' (length=5)
第4个函数$sortFlag说明 $sortFlag共有6个值,详情可以参考 http://php.net/manual/en/function.sort.php, multisort将排序的值根据$sortFlag的设置转换类型后排序。
分类:
Yii2.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律