array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
参数
array1:要排序的 array。
array1_sort_order:之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。
此参数可以和 array1_sort_flags
互换,也可以完全删除,默认是 SORT_ASC
。
...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。
提供的数组和之前的数组要有相同数量的元素。换言之,排序是按字典顺序排列的。
成功时返回 TRUE, 或者在失败时返回 FALSE。
1、多个数组排序
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
print_r($ar1);
print_r($ar2);
第一个数组按升序排序,第二个数组按第一个数组的索引顺序进行排序而不是按自己的value值 ,针对第一个数组里相同的值100,第二个数组再按默认顺序升序2,3排序
2、排序多维数组
<?php
$ar = array(
array("10", 11, 100, 100, "a"),
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列)。第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列)。
3、对数据库结果进行排序
按照多个字段进行排序,主排序字段值相等时,再按照次排序字段排序
本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。
例子中的数据如下:
数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。
$data = [
array('volume' => 67, 'edition' => 2);
array('volume' => 86, 'edition' => 1);
array('volume' => 85, 'edition' => 6);
array('volume' => 98, 'edition' => 2);
array('volume' => 86, 'edition' => 6);
array('volume' => 67, 'edition' => 7);
];
本例中将把 volume 降序排列,把 edition 升序排列。
现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
<?php
// 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>