需求:有一个学生信息的二维数组,需要根据年龄从大到小排序,数组如下:
$arrUsers = array(
array(
'id' => 1,
'name' => '张三',
'age' => 25,
),
array(
'id' => 2,
'name' => '李四',
'age' => 23,
),
array(
'id' => 3,
'name' => '王五',
'age' => 40,
),
array(
'id' => 4,
'name' => '赵六',
'age' => 31,
),
array(
'id' => 5,
'name' => '黄七',
'age' => 20,
),
);
解决方案:
一、
$sort = array(
'direction' => 'SORT_DESC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
'field' => 'age', //排序字段
);
$arrSort = array();
foreach($arrUsers AS $uniqid => $row){
foreach($row AS $key=>$value){
$arrSort[$key][$uniqid] = $value;
}
}
if($sort['direction']){
array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);
}
var_dump($arrUsers);
二、
$last_ages = array_column($arrUsers,'age');
array_multisort($last_ages ,SORT_DESC,$arrUsers);
var_dump($arrUsers);
关键方法:
array_multisort () 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,并返回排序数组。
此处用到了年龄age的一维数组对学生信息这个二维数组进行排序。
理解这个函数首先举个简单例子,
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2); //默认SORT_ASC
var_dump($ar1);
var_dump($ar2);
//打印结果
array(4) {
[0]=> int(0)
[1]=> int(10)
[2]=> int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(4)
[1]=> int(1)
[2]=> int(2)
[3]=> int(3)
}
简单来说就是根据第一个数组的排序(SORT_ASC或SORT_DESC),返回键值对应的排序后的第二个数组。
如上图 $ar2[3] = 4 对应 $ar1[3] = 0 ,当正序排列时 $ar1[3] = 0 最小变为 $ar1[0] = 0 ,对应 $ar2[0] = 4 。
更多请查询手册,http://www.php.net/manual/zh/function.array-multisort.php
参考:
http://www.cnblogs.com/wenzheshen/p/9455554.html
https://blog.youkuaiyun.com/qq_38666502/article/details/81077104
每日吃超过十块的盖饭都会考虑好久
却心系宇宙从哪来到哪去的普普通程序员
2018.11.6