php二维数组根据指定字段排序
方法一:
/** * 二维数组排序 * @param array $arr 待排序的二维数组 * @param string $key 排序的字段 * @param string $type 排序类型: asc desc * @return array */ function arraySort(array $arr, string $key, $type = 'asc') { $key_values = []; foreach ($arr as $k => $v) { $key_values[$k] = $v[$key]; } if ($type == 'asc') { asort($key_values); } else { arsort($key_values); } reset($key_values); $new_array = []; foreach ($key_values as $k => $v) { $new_array[$k] = $arr[$k]; } return $new_array; }
方法二:
/** * 二维数组排序 * @param array $arr 待排序的二维数组 * @param string $key 排序的字段 * @param string $type 排序类型: asc desc */ function arraySort2(array &$arr, string $key, $type = 'asc') { /*$key_values = []; foreach ($arr as $k => $v) { $key_values[$k] = $v[$key]; }*/ $key_values = array_column($arr, $key); $sort = $type == 'asc' ? SORT_ASC : SORT_DESC; array_multisort($key_values, $sort, $arr); return $arr }
方法三:
/** * 通过自定义方法排序 * @param $arr * @param $key * @param $type * @return mixed */ function sortArray($arr, $key, $type = 'asc') { // 通过自定义方法排序 usort($arr, function ($a, $b) use ($key, $type) { if ($type == 'desc') { return -strcmp($a[$key], $b[$key]); } return strcmp($a[$key], $b[$key]); }); return $arr; }
测试:
$arr_test = []; $str = implode('', array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'))); for ($i = 0; $i <= 10; $i++) { $arr_test[$i]['name'] = substr(str_shuffle($str), 0, rand(3, 10)); $arr_test[$i]['age'] = rand(1, 100); } print_r($arr_test); $arr_result = arraySort($arr_test, 'age'); print_r($arr_result); arraySort2($arr_test, 'age'); print_r($arr_test);