实现amount最大和age最大顺序排序,原数据:
array(4) { [0] => array(2) { ["amount"] => int(50) ["age"] => int(4) } [1] => array(2) { ["amount"] => int(100) ["age"] => int(10) } [2] => array(2) { ["amount"] => int(200) ["age"] => int(20) } [3] => array(2) { ["amount"] => int(300) ["age"] => int(30) } }
一、使用array_multisort实现二维数组,多字段排序
array_multisort(
array_column($data, 'amount'),SORT_DESC,
array_column($data, 'age'),SORT_DESC,
$data
);
排序后
array(4) {
[0]=>
array(2) {
["amount"]=>
int(300)
["age"]=>
int(30)
}
[1]=>
array(2) {
["amount"]=>
int(200)
["age"]=>
int(20)
}
[2]=>
array(2) {
["amount"]=>
int(100)
["age"]=>
int(10)
}
[3]=>
array(2) {
["amount"]=>
int(50)
["age"]=>
int(4)
}
}
二、sortArrayByManyField自定义函数排序
$data=[];//排序数组
$list = sortArrayByManyField($data, 'amount', SORT_DESC, 'age', SORT_DESC);
function sortArrayByManyField()
{
$args = func_get_args(); // 获取函数的参数的数组
if (empty($args)) {
return [];
}
$arr = array_shift($args);
if (!is_array($arr)) {
return [];
}
foreach ($args as $key => $field) {
if (is_string($field)) {
$temp = array();
foreach ($arr as $index => $val) {
$temp[$index] = $val[$field];
}
$args[$key] = $temp;
}
}
$args[] = &$arr;//引用值
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
sortArrayByManyField排序后:
array(4) { [0] => array(2) { ["amount"] => int(300) ["age"] => int(30) } [1] => array(2) { ["amount"] => int(200) ["age"] => int(20) } [2] => array(2) { ["amount"] => int(100) ["age"] => int(10) } [3] => array(2) { ["amount"] => int(50) ["age"] => int(4) } }