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

/*
 * 对多维数组按指定键名进行排序
 * $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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值