array_multisort 函数的使用
w3c上的解释
定义和用法
array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。
注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。
语法如下:
array_multisort(array1,sorting order,sorting type,array2,array3...)
看了半天的例子还是没怎么看懂,在此举个例子说明下该函数的意思:
有一个多维数组如下:
$guys = [ [ 'number'=>'1', 'score' => 90, 'name' => 'song', ], [ 'number'=>'2', 'score' => 90, 'name' => 'dong', ], [ 'number'=>'3', 'score' => 80, 'name' => 'mong', ] ];
三个学生的数据,number代表学号,score是成绩,name是姓名。对学生进行排序,首先按照成绩从高到低,再按照姓名按照字符串从低到高排序,按照我们的要求,那么排好后的顺序应该是:
2、1、3
下面将如何用该函数实现:
首先提取出来成绩和姓名数组。使用该函数,参数中每个数组的长度要一样,否则会报错的。
$scores = array(); $names = array(); foreach ($guys as $value) { $scores[] = $value['score']; $names[] = $value['name']; }
提取的姓名数组,成绩数组和需要排序的学生数组都是有三项,符合要求。先按照成绩降序,如果成绩相同,再按照名字升序。如果成绩都不相同,那么名字排序是没用的。
array_multisort($scores,SORT_DESC,$names,SORT_ASC,$guys); print_r($scores); print_r($names); print_r($guys);
打印出来的效果如下:
Array ( [0] => 90 [1] => 90 [2] => 80 ) Array ( [0] => dong [1] => song [2] => mong ) Array ( [0] => Array ( [number] => 2 [score] => 90 [name] => dong ) [1] => Array ( [number] => 1 [score] => 90 [name] => song ) [2] => Array ( [number] => 3 [score] => 80 [name] => mong ) )
排序前后,三个数组的顺序都是一一对应的,即三个数组是同步变化的,所以达到了对第三个数组的排序。