php对二维数组进行多字段排序

/**
 * 二维数组根据字段排序
 * @param array $arr [排序的二维数组]
 * @param $condition [排序的条件 形如 array('id'=>SORT_DESC)]
 * @return array
 */
function SortArrByManyField($arr,$condition)
{
    if(empty($condition)){
        return null;
    }
    
    $temp = array();
    $i = 0;
    foreach($condition as $key=>$ar){
        foreach($arr as $k=>$a){
        
            $temp[$i][] = $a[$key];
            
        }
        
        $i += 2;
        $temp[] = $ar;
    }
    
    $temp[] = &$arr;

    call_user_func_array('array_multisort',$temp);
    return array_pop($temp);
}


然后我们调用上面封装好的函数,如下所示:


$data = array(
        array(
                'id'   => 1,
                'name' => '张三',
                'age'  => 25,
        ),
        array(
                'id'   => 2,
                'name' => '李四',
                'age'  => 23,
        ),
        array(
                'id'   => 3,
                'name' => '王五',
                'age'  => 40,
        ),
        array(
                'id'   => 4,
                'name' => '赵六',
                'age'  => 23,
        ),
        array(
                'id'   => 5,
                'name' => '黄七',
                'age'  => 20,
        ),
    );
    
$condition['age'] = SORT_DESC;
$condition['id'] = SORT_ASC;

$sort_arr = SortArrByManyField($data,$condition);
var_dump($sort_arr);

    对于此函数排序来说,是有优先级之分的,例如我们这里的condition条件数组,首先会对age进行排序,遇到相同age的话,就会再根据其id的升序的顺序来进行排序。结果如下


sort.JPG


头像
QQ登录: