一、概述
在 PHP 中,要对多维数组进行排序,可以使用多种排序函数,如 sort()、rsort()、asort()、arsort() 等等。但是这些函数仅适用于一维数组的排序,并不能对多维数组进行排序。针对多维数组的排序,需要自己实现一个多维数组排序函数。
二、基本思路
多维数组的排序是针对其中的某个元素进行排序,所以我们需要指定要排序的元素(称为“排序键”)。对于每个子数组,在指定的排序键上根据给定的排序方式排序,并构建一个新的多维数组。
三、函数实现
下面是一个简单的多维数组排序函数,它可以对数组的任意维度进行排序。
```php
function array_sort($arr, $column, $order = SORT_ASC) {
$sort_column = array_column($arr, $column);
array_multisort($sort_column, $order, $arr);
return $arr;
}
```
该函数使用了 PHP5.5 新增的 array_column() 函数。该函数可以取出数组中某个列的值,并返回一个一维数组,这正好可以用于排序。array_column() 函数的第一个参数是要取值的数组,第二个参数是要取的列名或索引。上面的代码中,$column 就是要排序的列名,$order 是排序方式,可以是 SORT_ASC(升序)或 SORT_DESC(降序)。
排序的核心是 array_multisort() 函数。该函数可以同时对多个数组进行排序,根据第一个数组排序后,剩下的数组会跟着排序。这里只有一个数组 $arr,但由于我们已经用 array_column() 取出了一个一维数组,所以在 array_multisort() 中排序时先要对这个一维数组进行排序,然后用 $arr 跟着排序。最后返回排序后的多维数组。
四、使用示例
假设有一个包含若干人员信息的数组 $people,它包含“姓名”、“年龄”、“身高”和“性别”四个字段,我们要按照“年龄”从小到大排序。
```php
$people = array(
array('name' => 'Tom', 'age' => 25, 'height' => 180, 'gender' => 'male'),
array('name' => 'Bob', 'age' => 18, 'height' => 175, 'gender' => 'male'),
array('name' => 'Lily', 'age' => 22, 'height' => 170, 'gender' => 'female'),
array('name' => 'Jerry', 'age' => 30, 'height' => 185, 'gender' => 'male'),
array('name' => 'Lucy', 'age' => 20, 'height' => 165, 'gender' => 'female')
);
$result = array_sort($people, 'age', SORT_ASC);
print_r($result);
```
输出结果如下:
```
Array
(
[0] => Array
(
[name] => Bob
[age] => 18
[height] => 175
[gender] => male
)
[1] => Array
(
[name] => Lucy
[age] => 20
[height] => 165
[gender] => female
)
[2] => Array
(
[name] => Lily
[age] => 22
[height] => 170
[gender] => female
)
[3] => Array
(
[name] => Tom
[age] => 25
[height] => 180
[gender] => male
)
[4] => Array
(
[name] => Jerry
[age] => 30
[height] => 185
[gender] => male
)
)
```
可以看出,该函数可以很方便地对多维数组进行排序。
五、注意事项
1. 排序键必须是可以比较的类型,如字符串或数字,否则会抛出“Notice: Array to string conversion”等错误。
2. 如果排序数组中有相等的元素,则排序后它们的相对位置不变。如果要保证相对位置的改变,可以在排序键后再加上一个唯一的标识,例如 ID 等。
3. 如果要对多个列进行排序,可以多次调用 array_multisort() 函数,每次对一个排序键进行排序,这样可以实现多个排序键的混合排序。
六、延伸阅读
1. PHP 官方文档中关于 array_column() 函数的说明: 2. PHP 官方文档中关于 array_multisort() 函数的说明: 壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。 我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复