array_multisort 是 PHP 中的一个强大的函数,用于对对多个数组或多维数组进行排序。
参数中的数组被当成一个表的列并以行来进行排序 – 这类似 SQL 的 ORDER BY 子句的功能。
第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $… ]]] )
参数
- array1: 要排序的第一个数组,作为主数组,根据里边的内容对。
- array1_sort_order: 第一个数组的排序顺序,可以是
SORT_ASC
(升序) 或SORT_DESC
(降序)。默认值是SORT_ASC
。 - array1_sort_flags: 控制排序的行为,可以是以下常量之一:
SORT_REGULAR
: 按照通常方法比较单元(不改变类型)。SORT_NUMERIC
: 按照数字比较单元。SORT_STRING
: 按照字符串比较单元。SORT_LOCALE_STRING
: 根据当前的本地化设置比较单元。SORT_NATURAL
: 按自然顺序算法比较单元。SORT_FLAG_CASE
: 可以与SORT_STRING
或SORT_NATURAL
一起使用,不区分大小写排序。
剩下的参数是可选的,可以继续添加多个数组及其排序顺序和排序标志。
返回值
成功时返回 true
,失败时返回 false
。
示例
单数组排序
$arr = [
[7, 6, 4, 2],
[0, 0, 0, 0],
[2, 1, 4, 5],
[1, 7, 2, 1],
];
$firstColumn = array_column($arr, 0);
array_multisort($firstColumn, SORT_ASC, $arr);
print_r($arr);
多数组排序
$array1 = [3, 2, 5, 4];
$array2 = [“a”, “c”, “b”, “d”];
array_multisort($array1, SORT_ASC, $array2, SORT_DESC);
print_r($array1);
print_r($array2);
多重条件排序
$data = [
[‘name’ => ‘John’, ‘age’ => 30],
[‘name’ => ‘Jane’, ‘age’ => 25],
[‘name’ => ‘Doe’, ‘age’ => 30],
[‘name’ => ‘Smith’, ‘age’ => 25],
];
$ages = array_column($data, ‘age’);
$names = array_column($data, ‘name’);
array_multisort($ages, SORT_ASC, $names, SORT_DESC, $data);
print_r($data);
注意事项
- 按引用传递:
array_multisort
直接修改传递给它的数组,因此数组参数是按引用传递的。 - 排序顺序和标志: 可以为每个数组指定不同的排序顺序和标志。
- 数组长度相同: 如果排序多个数组,它们的长度应该相同,否则会导致未定义的行为。
使用场景
- 多维数组排序: 特别适用于需要按特定列排序的多维数组。
- 多数组同步排序: 同时对多个相关数组进行排序,例如在按年龄排序人员列表时,同时保持其姓名数组同步排序。