您的位置:

PHP函数array_multisort的多维数组排序实现

一、基本介绍

PHP的array_multisort()函数被用于对一个具有相同或不相同的关联数组、索引数组以及多维数组进行排序。同时,该函数会将关联数组中的键与键值进行关联处理。

在排序过程中,array_multisort函数将自动将键与键值的关联打乱,重新进行索引,因此,如果要保持原本的键与键值关联,就需要在输入数组前进行自写的键值配对。

二、实现原理

该函数的原理在于对于同维度,或最后一个维度为不含数组的多维数组,可以通过array_multisort函数的多参数实现排序。在数组排列的过程中,只有第一个数组会彻底排序。

对于例如array_multisort($array,..,SORT_DESC, SORT_NUMERIC);这样多个排序类型的合并,PHP将会按照给出的顺序对array进行排序,如果两个键值或者元素在第一排相同,就使用第二个排,如此下去。

三、参数详解

1、 $array:值数组。

若该参数的正常输入是一个维度多余1的数组,PHP就会默认多次排序

2、$array1, $sorting_order1, $sorting_type1, $array2,$sorting_order2, $sorting_type2, ...:数组/值数组,方向排序符,类型排序符

排序顺序是由第一个功能排序,第二个展开.. .. 顺次类推,类比SQL语言的ORDER BY子句的执行顺序。

3、$sorting_type:数组排序类型,可选参数,表示排序是升序还是降序,具体的取值为SORT_ASC和SORT_DESC,默认为升序。

4、$sorting_order:用于关联的值的用户自定义排序函数。order_func(mixed $a,mixed $b)

5、$sorting_flags:用于关联的值的用户自定义排序函数。flags_func(第一个参数,第二个参数)

四、示例代码

``` $arr = array( array("id"=>1,"name"=>"Tom","age"=>15), array("id"=>8,"name"=>"Alan","age"=>23), array("id"=>12,"name"=>"Steven","age"=>30), array("id"=>15,"name"=>"Abby","age"=>24), array("id"=>21,"name"=>"Ken","age"=>18), ); $names = array_column($arr, 'name'); array_multisort($names, SORT_ASC, $arr); print_r($arr); ```

该段代码展示了如何对一个多维数组进行按照姓名字母的升序排序的例子,使结果如下:

``` Array ( [0] => Array ( [id] => 15 [name] => Abby [age] => 24 ) [1] => Array ( [id] => 8 [name] => Alan [age] => 23 ) [2] => Array ( [id] => 21 [name] => Ken [age] => 18 ) [3] => Array ( [id] => 1 [name] => Tom [age] => 15 ) [4] => Array ( [id] => 12 [name] => Steven [age] => 30 ) ) ```

五、总结

array_multisort函数对基本数组排序提供了一个简单实用的工具,不过在进行操作时,需要考虑很多使用细节,包括数据格式、排序质量、排序方向等等,否则程序有可能会出现不同寻常的波动。在使用这样的函数时,需要充分考虑,做好测试,以确保排序后数据的正确性和合理性。