PHP数组按值从小到大排序问题:asort函数无效求解
解决PHP关联数组按值排序的问题
嘿,别发愁,asort()其实完全能搞定你的需求,大概率是你使用的时候没注意到细节~
你的目标是给关联数组按值从小到大排序并保留键名,asort()正是干这个的——它专门用于关联数组的按值升序排序,并且会保留键和值的对应关系。先看正确的实现代码:
$areas = [ 'area1' => 4.8, 'area2' => 6.1, 'area3' => 3.6, 'area4' => 5.1 ]; // 执行按值升序排序,直接修改原数组 asort($areas); // 遍历输出验证结果 foreach ($areas as $key => $value) { echo "$key => $value\n"; }
运行这段代码后,你会得到完全符合预期的输出:
area3 => 3.6 area1 => 4.8 area4 => 5.1 area2 => 6.1
为什么你之前用asort()没生效?
大概率是这几个小问题导致的:
- 错误接收返回值:
asort()的返回值是布尔值(成功返回true,失败返回false),它是直接修改原数组的。如果你写了$sorted = asort($areas);,那$sorted只是个布尔值,不是排序后的数组,你应该直接使用原数组$areas。 - 输出方式没看仔细:如果只是用
print_r()或var_dump()输出,可能你没留意键值的对应关系?或者不小心写错了数组变量名? - 值的类型问题(你的情况里不存在,但可以参考):如果数组值是字符串形式的数字(比如
'4.8'),可以加上排序标志SORT_NUMERIC确保按数值排序:asort($areas, SORT_NUMERIC);,不过你的数组值都是浮点数,不需要额外设置。
小补充:如果需要降序排序
之后要是需要从大到小排序,直接用arsort()就行,用法和asort()完全一致,只是排序方向相反。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

