PHP数组排序函数有哪些?各自的使用场景是什么

来源:开发教程作者:柬埔寨程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《PHP数组排序函数有哪些?各自的使用场景是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP数组排序函数有哪些?各自的使用场景是什么》有用,将其分享出去将是对创作者最好的鼓励。

PHP提供了丰富的数组排序函数,覆盖按值排序、按键排序、自定义规则排序等多种需求,开发者可以根据实际场景选择对应的函数实现数组有序化。

PHP数组排序函数有哪些?各自的使用场景是什么

常用PHP数组排序函数分类

PHP的数组排序函数可以按照排序依据和处理键名的方式分为以下几类:

  • 按数组值排序,保留原键名:asort()arsort()
  • 按数组值排序,重置数字键名:sort()rsort()
  • 按数组键名排序,保留键名关联:ksort()krsort()
  • 自定义规则排序:usort()uasort()uksort()
  • 自然排序:natsort()natcasesort()

基础排序函数详解与场景

sort()和rsort():重置键名的值排序

sort()函数会按照升序对数组值进行排序,排序完成后会重置所有的数字键名,字符串键名会被丢弃。rsort()则是降序版本,同样会重置数字键名。

适用场景:索引数组需要按值升序或降序排列,不需要保留原键名关联的场景,比如商品销量列表排序、用户积分排名等。

<?php
// 索引数组按值升序排序
$scoreList = [88, 92, 75, 100, 85];
sort($scoreList);
print_r($scoreList);
// 输出 Array ( [0] => 75 [1] => 85 [2] => 88 [3] => 92 [4] => 100 )

// 索引数组按值降序排序
rsort($scoreList);
print_r($scoreList);
// 输出 Array ( [0] => 100 [1] => 92 [2] => 88 [3] => 85 [4] => 75 )
?>

asort()和arsort():保留键名的值排序

asort()按升序对数组值排序,同时保留键名和值的关联对应关系,arsort()是降序版本,同样保留键名关联。

适用场景:关联数组需要按值排序,同时需要保留键名对应关系的场景,比如用户ID和对应积分的数组排序,排序后还能通过用户ID找到对应积分。

<?php
// 关联数组按值升序排序,保留键名
$userScore = [
    'user_1' => 88,
    'user_2' => 92,
    'user_3' => 75
];
asort($userScore);
print_r($userScore);
// 输出 Array ( [user_3] => 75 [user_1] => 88 [user_2] => 92 )

// 降序排序
arsort($userScore);
print_r($userScore);
// 输出 Array ( [user_2] => 92 [user_1] => 88 [user_3] => 75 )
?>

ksort()和krsort():按键名排序

ksort()按照键名的升序对数组排序,保留键名和值的关联,krsort()是键名降序版本。

适用场景:需要按照键名顺序处理数组的场景,比如按照日期作为键名的数组,需要按日期先后排序展示数据。

<?php
// 按日期键名升序排序
$dailyData = [
    '2024-03-02' => 150,
    '2024-03-01' => 120,
    '2024-03-03' => 180
];
ksort($dailyData);
print_r($dailyData);
// 输出 Array ( [2024-03-01] => 120 [2024-03-02] => 150 [2024-03-03] => 180 )

// 键名降序排序
krsort($dailyData);
print_r($dailyData);
// 输出 Array ( [2024-03-03] => 180 [2024-03-02] => 150 [2024-03-01] => 120 )
?>

自定义与自然排序函数

usort()系列:自定义规则排序

当内置的排序规则无法满足需求时,可以使用usort()函数,它接收一个回调函数作为第二个参数,在回调函数中定义两个元素的比较规则。

适用场景:复杂排序规则,比如多维数组按照某个子元素排序、对象数组按照对象属性排序等。

回调函数的返回值规则:如果第一个参数小于第二个参数返回负数,等于返回0,大于返回正数。

<?php
// 多维数组按照年龄升序排序
$userList = [
    ['name' => '张三', 'age' => 25],
    ['name' => '李四', 'age' => 22],
    ['name' => '王五', 'age' => 28]
];
usort($userList, function($a, $b) {
    return $a['age'] - $b['age'];
});
print_r($userList);
/*
输出:
Array (
    [0] => Array ( [name] => 李四 [age] => 22 )
    [1] => Array ( [name] => 张三 [age] => 25 )
    [2] => Array ( [name] => 王五 [age] => 28 )
)
*/
?>

natsort()和natcasesort():自然排序

natsort()按照人类自然的认知方式对字符串值排序,比如会将img2.jpg排在img10.jpg前面,而普通排序会把img10.jpg排在img2.jpg前面。natcasesort()是自然排序的不区分大小写版本。

适用场景:文件名、带数字的字符串数组排序,需要符合人类阅读习惯的场景。

<?php
$fileList = ['img10.jpg', 'img2.jpg', 'img1.jpg', 'img20.jpg'];
// 普通sort排序
sort($fileList);
print_r($fileList);
// 输出 Array ( [0] => img1.jpg [1] => img10.jpg [2] => img2.jpg [3] => img20.jpg )

// 自然排序
natsort($fileList);
print_r($fileList);
// 输出 Array ( [2] => img1.jpg [1] => img2.jpg [0] => img10.jpg [3] => img20.jpg )
?>

排序函数特性对比

以下是常用排序函数的核心特性对比:

函数名排序依据是否保留键名排序方向
sort()否,重置数字键升序
rsort()否,重置数字键降序
asort()升序
arsort()降序
ksort()键名升序
krsort()键名降序
usort()自定义规则否,重置数字键由回调决定
natsort()值(自然规则)升序

使用注意事项

  • 所有排序函数都会直接修改原数组,而不是返回新的排序数组,如果需要保留原数组,需要先拷贝数组再排序。
  • 排序函数默认按照常规方式比较值,比如字符串比较是按字节比较,中文排序可能需要先设置地区或者使用自定义比较规则。
  • 使用usort()等自定义排序函数时,回调函数需要保证比较逻辑的一致性,避免出现不稳定的排序结果。

PHParray_sort数组排序usort修改时间:2026-06-16 14:27:43

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。