yii2 多维数组指定多字段排序
本文涉及关键函数(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。
- 上一篇: PHP 轻量级的PHP类检测移动设备(包括平板电脑)。
- 下一篇: Yii2导出列表到csv文件示例