array_multisort 是 PHP 中的一个强大的函数,用于对对多个数组或多维数组进行排序。

参数中的数组被当成一个表的列并以行来进行排序 – 这类似 SQL 的 ORDER BY 子句的功能。

第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $… ]]] )

参数

  1. array1: 要排序的第一个数组,作为主数组,根据里边的内容对。
  2. array1_sort_order: 第一个数组的排序顺序,可以是 SORT_ASC (升序) 或 SORT_DESC (降序)。默认值是 SORT_ASC
  3. array1_sort_flags: 控制排序的行为,可以是以下常量之一:
    • SORT_REGULAR: 按照通常方法比较单元(不改变类型)。
    • SORT_NUMERIC: 按照数字比较单元。
    • SORT_STRING: 按照字符串比较单元。
    • SORT_LOCALE_STRING: 根据当前的本地化设置比较单元。
    • SORT_NATURAL: 按自然顺序算法比较单元。
    • SORT_FLAG_CASE: 可以与 SORT_STRINGSORT_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);

注意事项

  1. 按引用传递: array_multisort 直接修改传递给它的数组,因此数组参数是按引用传递的。
  2. 排序顺序和标志: 可以为每个数组指定不同的排序顺序和标志。
  3. 数组长度相同: 如果排序多个数组,它们的长度应该相同,否则会导致未定义的行为。

使用场景

  • 多维数组排序: 特别适用于需要按特定列排序的多维数组。
  • 多数组同步排序: 同时对多个相关数组进行排序,例如在按年龄排序人员列表时,同时保持其姓名数组同步排序。

作者 admin

百度广告效果展示