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_STRING
或SORT_NATURAL
以不区分大小写的字符串进行排序
array1_sort_order
在这种情况下,这个参数可以交换或完全省略SORT_REGULAR
。
...
更多数组,可选择排序顺序和标志。仅比较与先前阵列中的等效元素相对应的元素。换句话说,这种排序是字典式的。
返回值
成功时返回TRUE
或失败时返回FALSE
。
更新日志
版本 | 描述 |
---|---|
5.4.0 | SORT_NATURAL和SORT_FLAG_CASE被添加到array1_sort_flags作为可能的排序标志。 |
5.3.0 | SORT_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_STRING
和SORT_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 →