PHP数组按数值从大到小排序结果异常如何正确实现?
问题原因
sort()、asort()是PHP默认的升序排序函数,仅支持从小到大排列,本身不符合从大到小的排序需求。其中sort()会重置数组的数字索引,asort()会保留原有键名,但两者排序方向均为升序。- 你得到
[6, 100, 1]的异常排序结果,不符合int类型数组升序排序的正常输出(正常升序int数组排序后应为[1, 6, 100]),大概率是实际运行环境中你的数组元素为字符串类型,或排序前数组被其他业务逻辑修改导致。
正确实现方案
按是否需要保留原键分为两种场景选择对应函数即可:
场景1:不需要保留原键名,排序后使用从0开始的连续数字索引
使用降序排序函数rsort(),示例代码:
<?php $arr = [1, 100, 6]; rsort($arr, SORT_NUMERIC); var_dump($arr);
运行后输出结果和你的预期完全一致:
array(3) { [0]=> int(100) [1]=> int(6) [2]=> int(1) }
场景2:需要保留原数组的键名关联关系
使用保留键的降序排序函数arsort(),示例代码:
<?php $arr = [1, 100, 6]; arsort($arr, SORT_NUMERIC); var_dump($arr);
运行后输出结果为:
array(3) { [1]=> int(100) [2]=> int(6) [0]=> int(1) }
内容的提问来源于stack exchange,提问作者Jaquarh
相关产品推荐
相关产品推荐

