首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

array_multisort

(PHP 4, PHP 5, PHP 7)

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

描述

代码语言:javascript
复制
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.0

SORT_NATURAL和SORT_FLAG_CASE被添加到array1_sort_flags作为可能的排序标志。

5.3.0

SORT_LOCALE_STRING作为可能的排序标志添加到array1_sort_flags。

示例

示例#1排序多个数组

代码语言:javascript
复制
<?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)也被分类。

代码语言:javascript
复制
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排序多维数组

代码语言:javascript
复制
<?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(按数字排序,按降序排列)。

代码语言:javascript
复制
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对数据库结果进行排序

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

示例数据:

代码语言:javascript
复制
volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

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

代码语言:javascript
复制
<?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()需要一个列数组,所以我们使用下面的代码来获得列,然后执行排序。

代码语言:javascript
复制
<?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);
?>

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

代码语言:javascript
复制
volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

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

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

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

代码语言:javascript
复制
<?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);
?>

上面的例子将输出:

代码语言:javascript
复制
Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)

另请参阅

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

← array_merge

array_pad →

扫码关注腾讯云开发者

领取腾讯云代金券