数组排序

PHP 有几个函数用于处理数组排序,本文档旨在帮助您理清所有内容。

主要区别在于

  • 有些排序基于 数组 键,而另一些则基于值: $array['key'] = 'value';
  • 排序后键和值之间的关联是否保持,这可能意味着键被重置为数字(0,1,2 ...)
  • 排序的顺序:字母顺序、升序(从低到高)、降序(从高到低)、自然顺序、随机顺序或用户定义顺序
  • 注意:所有这些排序函数都直接作用于数组变量本身,而不是返回一个新的已排序数组
  • 如果任何这些排序函数将两个成员评估为相等,那么它们将保留其原始顺序。在 PHP 8.0.0 之前,它们的顺序是不确定的(排序不稳定)。

排序函数属性
函数名称 按什么排序 维护键关联 排序顺序 相关函数
array_multisort() 字符串 键是,整数 键否 第一个数组或排序选项 array_walk()
asort() 升序 arsort()
arsort() 降序 asort()
krsort() 降序 ksort()
ksort() 升序 krsort()
natcasesort() 自然顺序,不区分大小写 natsort()
natsort() 自然顺序 natcasesort()
rsort() 降序 sort()
shuffle() 随机顺序 array_rand()
sort() 升序 rsort()
uasort() 用户定义 uksort()
uksort() 用户定义 uasort()
usort() 用户定义 uasort()

添加注释

用户贡献注释 2 个注释

"Matthew Rice"
11 年前
虽然这可能看起来很明显,但用户定义的数组排序函数 (uksort()、uasort()、usort()) *不会* 在数组中 *至少有两个值* 时被调用。

以下代码

<?php

function usortTest($a, $b) {
var_dump($a);
var_dump($b);
return -
1;
}

$test = array('val1');
usort($test, "usortTest");

$test2 = array('val2', 'val3');
usort($test2, "usortTest");

?>

将输出

string(4) "val3"
string(4) "val2"

第一个数组不会被发送到函数。

请在任何情况下都不要在这些函数中放置任何修改值或应用非排序业务逻辑的逻辑,因为它们并不总是会执行。
oculiz at gmail dot com
13 年前
另一种不区分大小写地按键排序的方法是

<?php
uksort
($array, 'strcasecmp');
?>

由于 strcasecmp 已经在 php 中预定义,因此它为您省去了实际编写比较函数的麻烦。
To Top