二维数组根据某个字段进行重新排序:
/**
* 二维数组根据某个字段排序
* @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);