PHP

array_multisort

array_multisort

(PHP 4, PHP 5, PHP 7)

array_multisort - 对多维或多维数组进行排序

描述

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

可以使用array_multisort()来一次对多个数组进行排序,或对多维数组进行一个或多个维度的排序。

关联(字符串)键将被保留,但数字键将被重新索引。

注意:如果两个成员比较相等,则它们在已排序数组中的相对顺序是未定义的。

参数

array1

一个正在排序的数组。

array1_sort_order

用于对前一个数组参数进行排序的顺序。要么SORT_ASC递增SORT_DESC排序,要么递减排序。

array1_sort_flags在这种情况下,这个参数可以交换或完全省略SORT_ASC

array1_sort_flags

前一个数组参数的排序选项:

排序类型标志:

  • SORT_REGULAR - 通常比较项目(不要更改类型)

  • SORT_NUMERIC - 用数字比较项目

  • SORT_STRING - 比较项目作为字符串

  • SORT_LOCALE_STRING - 根据当前语言环境将项目作为字符串进行比较。它使用语言环境,可以使用setlocale()进行更改

  • SORT_NATURAL - 比较项目作为字符串使用“自然排序”,如natsort()

  • SORT_FLAG_CASE-可以被组合(逐位OR)用SORT_STRINGSORT_NATURAL以不区分大小写的字符串进行排序

array1_sort_order在这种情况下,这个参数可以交换或完全省略SORT_REGULAR

...

更多数组,可选择排序顺序和标志。仅比较与先前阵列中的等效元素相对应的元素。换句话说,这种排序是字典式的。

返回值

成功时返回TRUE或失败时返回FALSE

更新日志

版本描述
5.4.0SORT_NATURAL和SORT_FLAG_CASE被添加到array1_sort_flags作为可能的排序标志。
5.3.0SORT_LOCALE_STRING作为可能的排序标志添加到array1_sort_flags。

示例

示例#1排序多个数组

<?php $ar1 = array(10, 100, 100, 0 $ar2 = array(1, 3, 2, 4 array_multisort($ar1, $ar2 var_dump($ar1 var_dump($ar2 ?>

在此示例中,排序后,第一个数组将包含0,10,100,100。第二个数组将包含4,1,2,3。第二个数组中的条目对应于第一个数组中的相同条目(100和100)也被分类。

array(4) { [0]=> int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(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(按数字排序,按降序排列)。

array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } }

示例#3对数据库结果进行排序

在本例中,数据数组中的每个元素表示表中的一行。这种类型的数据集是数据库记录的典型。

示例数据:

volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7

数据是一个数组,称为数据。例如,这通常可以通过与mysqli_fetch_assoc()循环来获得。

<?php $data[] = array('volume' => 67, 'edition' => 2 $data[] = array('volume' => 86, 'edition' => 1 $data[] = array('volume' => 85, 'edition' => 6 $data[] = array('volume' => 98, 'edition' => 2 $data[] = array('volume' => 86, 'edition' => 6 $data[] = array('volume' => 67, 'edition' => 7 ?>

在这个例子中,我们将按体积降序排列,版本升序。

我们有一个行数组,但array_multisort()需要一个列数组,所以我们使用下面的代码来获得列,然后执行排序。

<?php // Obtain a list of columns foreach ($data as $key => $row) {     $volume[$key]  = $row['volume'];     $edition[$key] = $row['edition']; } // Sort the data with volume descending, edition ascending // Add $data as the last parameter, to sort by the common key array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data ?>

数据集现在进行排序,如下所示:

volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7

示例#4不区分大小写的排序

这两个SORT_STRINGSORT_REGULAR是大小写敏感的,开始用大写字母串将开始以小写字母串面前。

要执行不区分大小写的排序,请强制排序顺序由原始数组的小写副本确定。

<?php $array = array('Alpha', 'atomic', 'Beta', 'bank' $array_lowercase = array_map('strtolower', $array array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array print_r($array ?>

上面的例子将输出:

Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )

另请参阅

  • usort() - 使用用户定义的比较函数按值排序数组

← array_merge

array_pad →