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

来源:互联网 发布:访客网络设置多少 编辑:程序博客网 时间:2024/05/29 14:52
/* * 对多维数组按指定键名进行排序 * $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;}
原创粉丝点击