熟悉PHP的小伙伴都知道有很多内置函数可以对数组进行排序操作或者自定义一些排序方法(冒泡)等等。
sort() 函数用于对数组单元升序排序。
rsort() 函数用于对数组单元降序排序。
asort() 函数用于对数组单元升序排序并保持索引关系。
arsort() 函数用于对数组单元降序排序并保持索引关系。
ksort() 函数用于对数组单元按照键名升序排序。
krsort() 函数用于对数组单元按照键名降序排序。
以上函数都针对的是一维数组的排序。
array_multisort()函数可以对多个数组或多维数组进行排序,或者根据某一维或多维对多维数组进行排序。
假设有一个二维数组
$sortArr = [
['id' => 12, 'money' => 99],
['id' => 1, 'money' => 98],
['id' => 5, 'money' => 94]
];
根据id进行升序排序
// 获取数组中id值
$ids = array_column($sortArr, 'id');
// 第一个参数就是需要排序key的值,传入后相当于先对 $ids 进行排序,然后根据排序后的$ids的key重新构建需要排序的$sortArr
array_multisort($ids, SORT_ASC, $sortArr);
print_r($sortArr);
输出结果
Array
(
[0] => Array
(
[id] => 1
[money] => 98
)
[1] => Array
(
[id] => 5
[money] => 94
)
[2] => Array
(
[id] => 12
[money] => 99
)
)
使用上一个例子的数组,并且多增加一个排序key。
$sortArr = [
['id' => 12, 'money' => 99, 'sort' => 0],
['id' => 1, 'money' => 98, 'sort' => 0],
['id' => 5, 'money' => 94, 'sort' => 1]
];
先通过排序字段进行降序,再通过金额进行降序
$moneys = array_column($sortArr, 'money');
$sorts = array_column($sortArr, 'sort');
array_multisort($sorts, SORT_DESC, $moneys, SORT_DESC, $sortArr);
print_r($sortArr);
输出结果
Array
(
[0] => Array
(
[id] => 5
[money] => 94
[sort] => 1
)
[1] => Array
(
[id] => 12
[money] => 99
[sort] => 0
)
[2] => Array
(
[id] => 1
[money] => 98
[sort] => 0
)
)