PHP Conference Japan 2024

数组排序

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