php-array_multisort()—对多个数组或多维数组进行排序

PHP / 1010人浏览 / 0人评论

array_multisort — 对多个数组或多维数组进行排序。array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。注意:如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。

php数组函数 array_multisort()

支持版本

(PHP 4, PHP 5, PHP 7, PHP 8)

定义和用法

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 。
array1_sort_flags为 array 参数设定选项:排序类型标志:SORT_REGULAR - 将项目按照通常方法比较(不修改类型)。SORT_NUMERIC - 按照数字大小比较。SORT_STRING - 按照字符串比较。SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。SORT_NATURAL - 以字符串的"自然排序",类似 natsort()。SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR。可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。

函数返回值

成功时返回 true, 或者在失败时返回 false。

更新日志

版本说明
5.4.0array1_sort_flags 增加 SORT_NATURAL 和 SORT_FLAG_CASE 选项。
5.3.0array1_sort_flags 增加选项 SORT_LOCALE_STRING。

演示案例

// 一维数组排序。注意,字符串排序区分大小写
$array_one = array('1','12','2','3','4','5','6','7','8','9','10','11','13','14');
$array_two = array('monday','Monday','Wednesday','wednesday','tuesday','Tuesday','thursday','Thursday','Friday','friday','Saturday','saturday','Sunday','sunday');
$array_three = array('a'=>'1','b'=>'2','c'=>'3','d'=>'4','e'=>'5','f'=>'6','g'=>'7','h'=>'8','i'=>'9','j'=>'10','k'=>'11','l'=>'12','m'=>'13','n'=>'14');
$array_four = array('a'=>'1','b'=>'2','c'=>'3','d'=>'4','e'=>'5','f'=>'6','g'=>'7','h'=>'a','i'=>'b','j'=>'c','k'=>'d','l'=>'e','m'=>'f','n'=>'g');
$array_five = array('a'=>'10','b'=>'20','c'=>'100','d'=>'99','e'=>'110','f'=>'210','g'=>'7','h'=>'a','i'=>'b','j'=>'ca','k'=>'db','l'=>'ec','m'=>'f','n'=>'g');
array_multisort($array_one);
array_multisort($array_two);
array_multisort($array_three);
array_multisort($array_four);
array_multisort($array_five);
var_dump($array_one);
var_dump($array_two);
var_dump($array_three);
var_dump($array_four);
var_dump($array_five);

array_multisort($array_one, SORT_DESC);
var_dump($array_one);

// 当array_multisort中存在多个数组,后面数组的排序不受自定义排序控制。  ·注意,字符串排序区分大小写
$array_one = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14');
$array_two = array('monday','Monday','wednesday','Wednesday','tuesday','Tuesday','thursday','Thursday','friday','Friday','saturday','Saturday','sunday','Sunday');
array_multisort($array_one, SORT_DESC, $array_two, SORT_ASC);

var_dump($array_one);
var_dump($array_two);

// 处理不区分大小写排序
$array_two = array('monday','Monday','wednesday','Wednesday','tuesday','Tuesday','thursday','Thursday','friday','Friday','saturday','Saturday','sunday','Sunday');
$array_lowercase = array_map('strtolower', $array_two);

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array_two);

var_dump($array_two);

// 二维数组,指定键排序
$array_six[] = array('day' => 'monday', 'num' => 1);
$array_six[] = array('day' => 'wednesday', 'num' => 2);
$array_six[] = array('day' => 'tuesday', 'num' => 3);
$array_six[] = array('day' => 'thursday', 'num' => 4);
$array_six[] = array('day' => 'friday', 'num' => 5);
$array_six[] = array('day' => 'saturday', 'num' => 6);
$array_six[] = array('day' => 'sunday', 'num' => 7);

foreach ($array_six as $key => $row) {
    $day[$key]  = $row['day'];
    $num[$key] = $row['num'];
}

array_multisort($num, SORT_DESC, $day, SORT_DESC, $array_six);
var_dump($array_six);

返回结果

array(14) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
  [3]=>
  string(1) "4"
  [4]=>
  string(1) "5"
  [5]=>
  string(1) "6"
  [6]=>
  string(1) "7"
  [7]=>
  string(1) "8"
  [8]=>
  string(1) "9"
  [9]=>
  string(2) "10"
  [10]=>
  string(2) "11"
  [11]=>
  string(2) "12"
  [12]=>
  string(2) "13"
  [13]=>
  string(2) "14"
}
array(14) {
  [0]=>
  string(6) "Friday"
  [1]=>
  string(6) "Monday"
  [2]=>
  string(8) "Saturday"
  [3]=>
  string(6) "Sunday"
  [4]=>
  string(8) "Thursday"
  [5]=>
  string(7) "Tuesday"
  [6]=>
  string(9) "Wednesday"
  [7]=>
  string(6) "friday"
  [8]=>
  string(6) "monday"
  [9]=>
  string(8) "saturday"
  [10]=>
  string(6) "sunday"
  [11]=>
  string(8) "thursday"
  [12]=>
  string(7) "tuesday"
  [13]=>
  string(9) "wednesday"
}
array(14) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  string(1) "4"
  ["e"]=>
  string(1) "5"
  ["f"]=>
  string(1) "6"
  ["g"]=>
  string(1) "7"
  ["h"]=>
  string(1) "8"
  ["i"]=>
  string(1) "9"
  ["j"]=>
  string(2) "10"
  ["k"]=>
  string(2) "11"
  ["l"]=>
  string(2) "12"
  ["m"]=>
  string(2) "13"
  ["n"]=>
  string(2) "14"
}
array(14) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  string(1) "4"
  ["e"]=>
  string(1) "5"
  ["f"]=>
  string(1) "6"
  ["g"]=>
  string(1) "7"
  ["h"]=>
  string(1) "a"
  ["i"]=>
  string(1) "b"
  ["j"]=>
  string(1) "c"
  ["k"]=>
  string(1) "d"
  ["l"]=>
  string(1) "e"
  ["m"]=>
  string(1) "f"
  ["n"]=>
  string(1) "g"
}
array(14) {
  ["g"]=>
  string(1) "7"
  ["a"]=>
  string(2) "10"
  ["b"]=>
  string(2) "20"
  ["d"]=>
  string(2) "99"
  ["c"]=>
  string(3) "100"
  ["e"]=>
  string(3) "110"
  ["f"]=>
  string(3) "210"
  ["h"]=>
  string(1) "a"
  ["i"]=>
  string(1) "b"
  ["j"]=>
  string(2) "ca"
  ["k"]=>
  string(2) "db"
  ["l"]=>
  string(2) "ec"
  ["m"]=>
  string(1) "f"
  ["n"]=>
  string(1) "g"
}
array(14) {
  [0]=>
  string(2) "14"
  [1]=>
  string(2) "13"
  [2]=>
  string(2) "12"
  [3]=>
  string(2) "11"
  [4]=>
  string(2) "10"
  [5]=>
  string(1) "9"
  [6]=>
  string(1) "8"
  [7]=>
  string(1) "7"
  [8]=>
  string(1) "6"
  [9]=>
  string(1) "5"
  [10]=>
  string(1) "4"
  [11]=>
  string(1) "3"
  [12]=>
  string(1) "2"
  [13]=>
  string(1) "1"
}
array(14) {
  [0]=>
  string(2) "14"
  [1]=>
  string(2) "13"
  [2]=>
  string(2) "12"
  [3]=>
  string(2) "11"
  [4]=>
  string(2) "10"
  [5]=>
  string(1) "9"
  [6]=>
  string(1) "8"
  [7]=>
  string(1) "7"
  [8]=>
  string(1) "6"
  [9]=>
  string(1) "5"
  [10]=>
  string(1) "4"
  [11]=>
  string(1) "3"
  [12]=>
  string(1) "2"
  [13]=>
  string(1) "1"
}
array(14) {
  [0]=>
  string(6) "Sunday"
  [1]=>
  string(6) "sunday"
  [2]=>
  string(8) "Saturday"
  [3]=>
  string(8) "saturday"
  [4]=>
  string(6) "Friday"
  [5]=>
  string(6) "friday"
  [6]=>
  string(8) "Thursday"
  [7]=>
  string(8) "thursday"
  [8]=>
  string(7) "Tuesday"
  [9]=>
  string(7) "tuesday"
  [10]=>
  string(9) "Wednesday"
  [11]=>
  string(9) "wednesday"
  [12]=>
  string(6) "Monday"
  [13]=>
  string(6) "monday"
}
array(14) {
  [0]=>
  string(6) "Friday"
  [1]=>
  string(6) "friday"
  [2]=>
  string(6) "Monday"
  [3]=>
  string(6) "monday"
  [4]=>
  string(8) "Saturday"
  [5]=>
  string(8) "saturday"
  [6]=>
  string(6) "Sunday"
  [7]=>
  string(6) "sunday"
  [8]=>
  string(8) "Thursday"
  [9]=>
  string(8) "thursday"
  [10]=>
  string(7) "Tuesday"
  [11]=>
  string(7) "tuesday"
  [12]=>
  string(9) "Wednesday"
  [13]=>
  string(9) "wednesday"
}
array(7) {
  [0]=>
  array(2) {
    ["day"]=>
    string(6) "sunday"
    ["num"]=>
    int(7)
  }
  [1]=>
  array(2) {
    ["day"]=>
    string(8) "saturday"
    ["num"]=>
    int(6)
  }
  [2]=>
  array(2) {
    ["day"]=>
    string(6) "friday"
    ["num"]=>
    int(5)
  }
  [3]=>
  array(2) {
    ["day"]=>
    string(8) "thursday"
    ["num"]=>
    int(4)
  }
  [4]=>
  array(2) {
    ["day"]=>
    string(7) "tuesday"
    ["num"]=>
    int(3)
  }
  [5]=>
  array(2) {
    ["day"]=>
    string(9) "wednesday"
    ["num"]=>
    int(2)
  }
  [6]=>
  array(2) {
    ["day"]=>
    string(6) "monday"
    ["num"]=>
    int(1)
  }
}

转载注明:

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我