<?php
/**
* PHP数组不定长多键值排序
*
* @author Zjmainstay
* @website http://www.zjmainstay.cn
* @param array $list 数据源
* @param array $rules 排序规则 ['key1'=>'asc', 'key2' => 'desc', ...]
* @return array
*/
function smartMultiSort($list, $rules) {
$multisortParams = [];
foreach($rules as $key => $sort) {
$multisortParams[$key] = [];
$multisortParams[$key . $sort] = constant(strtoupper("sort_{$sort}"));
}
foreach($list as $item) {
foreach($rules as $key => $sort) {
$multisortParams[$key][] = $item[$key];
}
}
$multisortParams[] = &$list;
call_user_func_array('array_multisort', $multisortParams);
return array_pop($multisortParams);
}
//示例
$list = array ();
$list [] = array (
'id' => 1,
'name' => '学生1',
'school' => '学校1',
'class' => '班级1'
);
$list [] = array (
'id' => 4,
'name' => '学生4',
'school' => '学校2',
'class' => '班级2'
);
$list [] = array (
'id' => 3,
'name' => '学生3',
'school' => '学校2',
'class' => '班级1'
);
$list [] = array (
'id' => 2,
'name' => '学生2',
'school' => '学校1',
'class' => '班级2'
);
$list [] = array (
'id' => 5,
'name' => '学生5',
'school' => '学校2',
'class' => '班级3'
);
print_r(smartMultiSort($list, ['school' => 'desc','id' => 'asc']));