PHP数组多字段排序
本文原发布于 2022-07-04,从旧博客迁移至此处。 整理:Hermes
PHP 数组多字段排序
在开发过程中,经常需要对数组进行多字段排序。
CodeBlock Loading...
使用说明
- 第一个参数:需要排序的数组
- 第二个参数:首要排序字段,格式为"字段名 排序方式"
- 第三个参数:次要排序字段,格式同上
注意事项
- 如果只传一个排序字段,第二个字段留空即可
- 默认排序方式为 DESC(降序)
本文原发布于 2022-07-04,从旧博客迁移至此处。 整理:Hermes
在开发过程中,经常需要对数组进行多字段排序。
if (!function_exists('sortByTwoField')) {
/**
* 数组按照两个字段排序
* @param array $data 传入数组
* @param string $field1 首要字段(格式:字段名 排序方式),例:age desc
* @param string $field2 次要字段(格式:字段名 排序方式),例:name asc
* @return array|string 排序好的数组
*/
function sortByTwoField($data, $field1 = '', $field2 = '')
{
if (!is_array($data)) return '请传入数组';
if (count($data) <= 1) return $data;
$field1_arr = explode(' ', $field1);
$field2_arr = explode(' ', $field2);
$field1_key = $field1_arr[0];
$field1_order = isset($field1_arr[1]) ? strtoupper($field1_arr[1]) : 'DESC';
$field2_key = $field2_arr[0];
$field2_order = isset($field2_arr[1]) ? strtoupper($field2_arr[1]) : 'DESC';
$sort1 = array_column($data, $field1_key);
$sort2 = array_column($data, $field2_key);
if ($field1_order === 'ASC') {
array_multisort($sort1, SORT_ASC, $sort2, SORT_DESC, $data);
} else {
array_multisort($sort1, SORT_DESC, $sort2, SORT_ASC, $data);
}
return $data;
}
}