php降序排序需据需求选函数:rsort()重置索引仅排值,arsort()保键名按值降序,krsort()按键名降序;均需注意类型标志(如sort_numeric)及php版本稳定性差异。

PHP按降序排序,关键看你要排什么、保留不保留键名。直接选对函数比调参数更可靠。
rsort():只排值,丢掉所有原始键名
适用于纯数字索引数组,比如 $scores = [85, 92, 78] 这类不需要记住“第几个是谁”的场景。
- 它会把原数组重置为
[0 => 92, 1 => 85, 2 => 78],原始键(如果有)全被抹掉 - 默认按
SORT_REGULAR比较,数字字符串混着来时容易出错,比如["10", "2", "100"]会被当字符串排成["2", "10", "100"](逆序后是["100", "10", "2"]),而不是数值意义上的["100", "10", "2"]—— 看似一样,但换成["2", "10", "100"]就暴露了:rsort()默认不会转数字 - 要按数值降序,得显式传
SORT_NUMERIC:rsort($arr, SORT_NUMERIC)
arsort():按值降序,但死守键值对应关系
这是处理关联数组的首选,比如 $user_scores = ['alice' => 92, 'bob' => 85, 'charlie' => 98]。
- 排序后仍是关联数组:
['charlie' => 98, 'alice' => 92, 'bob' => 85],键没丢,顺序按值排好了 - 同样要注意类型:
arsort($arr, SORT_NUMERIC)才能正确比较数字字符串;如果值里混着null、false或对象,SORT_REGULAR可能导致意外顺序 - PHP 8.0+ 保证相等值的相对顺序不变(稳定排序),老版本不保证
krsort():按键名降序,不是按值
名字容易误导,krsort() 排的是键(key),不是值(value)。比如 $data = ['zebra' => 1, 'apple' => 2, 'banana' => 3],krsort($data) 结果是 ['zebra' => 1, 'banana' => 3, 'apple' => 2]。
- 常用于需要按用户名、ID 字符串倒序展示的列表
- 也支持
SORT_STRING、SORT_NATURAL等标志,比如文件名["file10.txt", "file2.txt"]用SORT_NATURAL | SORT_FLAG_CASE才能自然排成["file10.txt", "file2.txt"](降序就是反过来) - 别和
arsort()搞混——一个看键,一个看值
真正容易踩坑的地方是:看到“降序”就下意识用 rsort(),结果发现关联数组的键全没了;或者用了 arsort() 却没加 SORT_NUMERIC,导致 "100" 排在 "2" 前面却以为是 bug。类型和键名保留,这两个维度必须同时确认清楚。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











