你想让多维数组排序像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使用Url组件
- Yii2的Html,Request组件详解
- YII2.0框架, 多图片上传功能
- yii2-imagine配置
- 有洁癖的禁止默认YII自带垃圾代码(个人认为)、JS、CSS(新手教程)
- Yii2 API接口输出统一Json和jsonp格式方法
- MySql 创建表的一些语句释义
- Yii2联合查询(配合GridView)
- Yii 通用系统字典
- ArrayHelper的多维数组排序函数multisort,强大无比。
- 路由规则,在Url中替换使用'/'以外的符号连接
- 从excel文件中读取表格内容,并批量写入数据库
- yii2注册时验证用户名、邮箱等唯一性
- Yii2最全的实战教程
- Composer安装yii2-imagine 压缩,剪切,旋转,水印
- LinkPager增加总页数 和总记录数
- Yii2 获取模块名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解
- 前端CSS框架
- Yii2 之 frontend 子模块实践之一:添加前后台子模块
- Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
- Yii2 之 frontend 子模块实践之三:布局和语言配置
- 完美解决ajax验证码不刷新问题,让验证码更加美观,不修改任何源代码
- yii2.0 表单小部件常用的默认选中
- Yii2 controller 传值给layout
- yii2 dropDownList 二级和三级 联动写法
- 微信扫码登录 新窗口二维码 扫完关闭二维码页面 进入登录页面
- yii2 实现 "上一篇,下一篇" 功能
- Yii 行为简单应用
- SQL语句