PHP如何对由单元素关联行组成的数组按行内值排序
PHP二维数组按子关联数组值升序排序解决方案
可用实现方案
方案一:使用usort实现(推荐,代码更简洁)
每个子数组仅包含一个键值对,直接取出对应值对比即可:
usort($a, function ($prev, $next) { return current($prev) - current($next); });
执行后原变量$a会直接更新为排序后的结果,符合你的预期输出。
方案二:修正array_multisort的用法
你之前使用array_multisort时存在两个错误:一是将整个子数组存入排序参考列,二是使用了降序参数SORT_DESC,修正后代码如下:
$sortColumn = []; foreach ($a as $key => $item) { // 仅提取子数组的值作为排序参考 $sortColumn[$key] = current($item); } // 按参考列升序排序,同步更新原数组$a array_multisort($sortColumn, SORT_ASC, $a);
原有方案失效的原因
uksort是用于按数组的键名排序,和你需要按子数组值排序的场景完全不匹配,且代码中用到的$res变量未定义,本身存在语法问题- 遍历
array_keys构建新数组的逻辑没有任何排序操作,只是对原数组做了浅拷贝,不会改变元素顺序 - 原有
array_multisort方案的排序参考值选取错误,且排序方向和需求相反,因此无法得到正确结果
内容的提问来源于stack exchange,提问作者Teresa
相关产品推荐
相关产品推荐

