PHP二维数组排序

一、

1.

$arrays   要排序的数组

$sort_key 根据排序的key

$sort_order 升序降序    SORT_ASC/SORT_DESC

$sort_type 排序key类型 SORT_NUMERIC/SORT_STRING

返回值:重新排列后的数组

function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){
if(is_array($arrays)){
foreach ($arrays as $array){
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
}
2.
//$array 要排序的数组
//$row 排序依据列
//$type 排序类型[asc or desc]
//return 排好序的数组
function array_sort($array,$row,$type){
$array_temp = array();
foreach($array as $v){
$array_temp[$v[$row]] = $v;
}
if($type == 'asc'){
ksort($array_temp);
}elseif($type='desc'){
krsort($array_temp);
}else{
}
return array_values($array_temp);
}
二、
$arr = array(
    0=>array('id'=>5,'name'=>'小明','num'=> 14),
    1=>array('id'=>5,'name'=>'小李','num'=>52),
    2=>array('id'=>4,'name'=>'小花','num'=>36),
    3=>array('id'=>6,'name'=>'小李','num'=>14)
);

采用php中的func_get_args函数,来动态获取传入的值,解决多字段排序。实现如下:

/**
     * 多维数组指定多字段排序
     * 排序:SORT_ASC升序 , SORT_DESC降序
     * 示例:$this->multiaArraySort($arr, 'num', SORT_DESC, 'sort', SORT_ASC)
     * @return array
     */
    public function multiaArraySort()
    {
        $funcArgs = func_get_args();
        if(empty($funcArgs)){
            return null;
        }
        $arr = array_shift($funcArgs);
        if(!is_array($arr)){
            throw new Exception('第一个参数必须为数组');
        }
        foreach($funcArgs as $key => $value){
            if(is_string($value)){
                $tempArr = array();
                foreach($arr as $k=> $v){
                    $tempArr[$k] = $v[$value];
                }
                $funcArgs[$key] = $tempArr;
            }
        }
        $funcArgs[] = &$arr;
        call_user_func_array('array_multisort', $funcArgs);
        return array_pop($funcArgs);
    }

   // 执行
   $arr = $this->multiaArraySort($arr, 'id', SORT_DESC, 'num', SORT_DESC);
   var_dump($arr);

运行结果如下:

array (size=4)
  0 => 
    array (size=3)
      'id' => int 6
      'name' => string '小李' (length=6)
      'num' => int 14
  1 => 
    array (size=3)
      'id' => int 5
      'name' => string '小李' (length=6)
      'num' => int 52
  2 => 
    array (size=3)
      'id' => int 5
      'name' => string '小明' (length=6)
      'num' => int 14
  3 => 
    array (size=3)
      'id' => int 4
      'name' => string '小花' (length=6)
      'num' => int 36
原文地址:https://www.cnblogs.com/wenxinphp/p/5970330.html