PHP二维数组根据一个或者多个字段重新排序


二维数组根据某个字段进行重新排序:

/**
 * 二维数组根据某个字段排序 
 * @param array $array 要排序的数组 
 * @param string $keys   要排序的键字段 
 * @param string $sort  排序类型  SORT_ASC     SORT_DESC 
 * @return array 排序后的数组 
 */
 function arraySort($array, $keys, $sort = SORT_DESC) {    
     $keysValue = array();    
     foreach ($array as $k => $v) {        
         $keysValue[$k] = $v[$keys];    
     }    
     array_multisort($keysValue, $sort, $array);    
     return $array;
 }
 # 按距离降序排序$a = arraySort($data, 'distance', SORT_DESC);

二维数组根据多个个字段进行重新排序(需要几个写几个):

function sortArrByManyField() {
        $args = func_get_args(); // 获取函数的参数的数组
// func_get_args()获取函数参数列表的数组。
// 该函数可以配合 func_get_arg() 和 func_num_args() 一起使用,从而使得用户自定义函数可以接受自定义个数的参数列表。
        if (empty($args)) {
            return null;
        }
        $arr = array_shift($args); // array_shift() 函数删除数组中第一个元素,并返回被删除元素的值
        if (!is_array($arr)) {
            throw new Exception("第一个参数不为数组");
        }
        foreach($args as $key => $field) {
            if (is_string($field)) {
                $temp = array();
                foreach($arr as $index => $val) {
                    $temp[$index] = $val[$field];
                }
                $args[$key] = $temp;
            }
        }
        $args[] = &$arr; //引用值
        call_user_func_array('array_multisort', $args);
        return array_pop($args); // array_pop()功能是数组的最后一个元素出栈,返回值是数组的最后一个元素
    }
    $newManyidu  = $this->sortArrByManyField($manyidu, 'rate', SORT_DESC, 'replysum', SORT_DESC, 'id', SORT_ASC);


最新回复 (0)
发新帖