array_multisort()

1. 定义

该函数对多个数组或多维数组进行排序。 成功时返回TRUE,失败时返回FALSE。

2. 语法

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

3. 参数说明

参数 可选性 数据类型 描述
$array1 必需 数组 待排序的数组
$array1_sort_order 可选 mixed 参数$array1的排序顺序
$array1_sort_flags 可选 mixed 参数$array1的比较方式
$... 可选 mixed $array1有相同数量元素的数组,后面可跟排序顺序参数和比较方式参数

其中,$array1_sort_order有两个可选值:

  • SORT_ASC:默认值,升序排列
  • SORT_DESC:降序排列

另外,$array1_sort_flags有以下几个可选值:

  • SORT_REGULAR:默认值,常规比较,不改变值类型
  • SORT_NUMERIC:将数组元素当做数字比较
  • SORT_STRING:将数组元素当做字符串比较
  • SORT_LOCALE_STRING:根据当前的区域设置将数组元素当做字符串比较
  • SORT_NATURAL:与函数natsort()类似,数组元素被当做字符串,以自然顺序进行比较排序
  • SORT_FLAG_CASE:不区分大小写比较,可与常量SORT_STRINGSORT_NATURAL使用OR关键字进行联合使用

4. 示例

<?php

// array_multisort()
// 对多个数组或多维数组进行排序

$arr = ['id' => 32, 'name' => 'Linn', 'age' => 23, 'gender' => 1, 'profile' => '我是Linn,今年23岁'];
array_multisort($arr, SORT_ASC, SORT_STRING);// 对单个数组排序
var_dump($arr);
/* 
array(5) {
  ["gender"]=>
  int(1)
  ["age"]=>
  int(23)
  ["id"]=>
  int(32)
  ["name"]=>
  string(4) "Linn"
  ["profile"]=>
  string(24) "我是Linn,今年23岁"
}
*/

$arr1 = ['id' => 32, 'name' => 'Linn', 'age' => 23, 'gender' => 1, 'profile' => '我是Linn,今年23岁'];
$arr2 = ['id' => 35, 'name' => 'Alex', 'age' => 18, 'gender' => 0, 'profile' => '我是Alex,今年18岁'];
$arr3 = ['id' => 38, 'name' => 'Bob', 'age' => 20, 'gender' => 0, 'profile' => '我是Bob,今年20岁'];
$arr4 = ['id' => 42, 'name' => 'Angle', 'age' => 24, 'gender' => 1, 'profile' => '我是Angle,今年24岁'];
array_multisort($arr1, SORT_STRING, $arr2, $arr3, $arr4);// 对多个数组进行排序
var_dump($arr1);
/* 
array(5) {
  ["gender"]=>
  int(1)
  ["age"]=>
  int(23)
  ["id"]=>
  int(32)
  ["name"]=>
  string(4) "Linn"
  ["profile"]=>
  string(24) "我是Linn,今年23岁"
}
*/
var_dump($arr2);
var_dump($arr3);
var_dump($arr4);

// 对多维数组进行排序
$arr = [
    'one'=>['id' => 32, 'name' => 'Linn', 'age' => 23, 'gender' => 1, 'profile' => '我是Linn,今年23岁'],
    'two'=>['id' => 35, 'name' => 'Alex', 'age' => 18, 'gender' => 0, 'profile' => '我是Alex,今年18岁'],
    'three'=>['id' => 38, 'name' => 'Bob', 'age' => 20, 'gender' => 0, 'profile' => '我是Bob,今年20岁'],
    'four'=>['id' => 42, 'name' => 'Angle', 'age' => 24, 'gender' => 1, 'profile' => '我是Angle,今年24岁'],
];
foreach ($arr as $key => $value) {
    $name[$key] = $value['name'];// 要排序的列
    $age[$key] = $value['age'];
}
array_multisort($name, SORT_STRING, $age, SORT_NUMERIC, $arr);
var_dump($arr);
/* 
array(4) {
  ["two"]=>
  array(5) {
    ["id"]=>
    int(35)
    ["name"]=>
    string(4) "Alex"
    ["age"]=>
    int(18)
    ["gender"]=>
    int(0)
    ["profile"]=>
    string(24) "我是Alex,今年18岁"
  }
  ["four"]=>
  array(5) {
    ["id"]=>
    int(42)
    ["name"]=>
    string(5) "Angle"
    ["age"]=>
    int(24)
    ["gender"]=>
    int(1)
    ["profile"]=>
    string(25) "我是Angle,今年24岁"
  }
  ["three"]=>
  array(5) {
    ["id"]=>
    int(38)
    ["name"]=>
    string(3) "Bob"
    ["age"]=>
    int(20)
    ["gender"]=>
    int(0)
    ["profile"]=>
    string(23) "我是Bob,今年20岁"
  }
  ["one"]=>
  array(5) {
    ["id"]=>
    int(32)
    ["name"]=>
    string(4) "Linn"
    ["age"]=>
    int(23)
    ["gender"]=>
    int(1)
    ["profile"]=>
    string(24) "我是Linn,今年23岁"
  }
}
*/

5. 延展阅读

  • usort():使用用户自定义的比较方法对数组元素进行排序