PHP多维数组按指定键名排序

时间:2021-09-27 19:03:53
/*
* 对多维数组按指定键名进行排序
* $arr 要排序的原始数组
* $key1 指定的主排序键名,eg: id
* $sort1 指定的主排序规则, eg: SORT_NUMERIC, SORT_DESC
* $key2 指定的辅排序键名,eg: sort
* $sort2 指定的辅排序规则, eg: SORT_NUMERIC, SORT_DESC
* $child_key_name 子元素键名
*/

function sort_array_by_feild($arr, $key1, $sort1, $key2='', $sort2='', $child_key_name=''){
//不是数组则直接返回
if(!is_array($arr)){
return;
}

$main_key = array();
if($key2){
$assist_key = array();
}

foreach($arr as $key => $val){
$main_key[] = $val[$key1];
if($key2){
$assist_key[] = $val[$key2];
}

//对子元素数组排序
if($child_key_name && isset($val[$child_key_name])){
$arr[$key][$child_key_name] = sort_array_by_feild($val[$child_key_name], $key1, $sort1, $key2, $sort2, $child_key_name);
}
}

//主字段排序判断
$sort1 = explode(',', $sort1);

if($key2 && $sort2){
//辅字段排序判断
$sort2 = explode(',', $sort2);

array_multisort($main_key, ($sort1[0]=='SORT_NUMERIC')?SORT_NUMERIC:SORT_STRING, ($sort1[1]=='SORT_DESC')?SORT_DESC:SORT_ASC, $assist_key, ($sort2[0]=='SORT_NUMERIC')?SORT_NUMERIC:SORT_STRING, ($sort2[1]=='SORT_DESC')?SORT_DESC:SORT_ASC, $arr);
}else{
array_multisort($main_key, ($sort1[0]=='SORT_NUMERIC')?SORT_NUMERIC:SORT_STRING, ($sort1[1]=='SORT_DESC')?SORT_DESC:SORT_ASC, $arr);
}

return $arr;
}