如何在PHP中按子元素conf对二维数组进行降序排序?
解决PHP嵌套数组按子元素降序排序的问题
嘿,我懂你遇到的这个排序坑了——嵌套数组排序很容易因为没找准目标数组或者回调逻辑不对白忙活。
先看你的数组结构:真正需要排序的是$response['Users']这个子数组,而不是整个$response。你之前直接给usort传$response肯定没效果,因为usort是作用在一维数组上的,而且你没定位到正确的排序目标。
给你一个直接能用的解决方案:
// 针对Users子数组执行降序排序 usort($response['Users'], function($a, $b) { // 降序逻辑:用后一个元素的conf减去前一个,数值大的排前面 return $b['conf'] - $a['conf']; });
为什么这个能生效?
- 我们明确指定了排序对象是
$response['Users'],这才是包含所有用户数据的一维数组(每个元素是带id和conf的子数组)。 - 回调函数里
$b['conf'] - $a['conf']的逻辑正好实现降序:如果$b的conf值比$a大,返回正数,usort就会把$b放到$a前面;反之则调整顺序,完全符合你的需求。
额外小提醒
如果你的conf字段是字符串类型(比如存的是数字字符串),直接相减也能正常工作,但更严谨的写法可以用strcmp的变种:
usort($response['Users'], function($a, $b) { return strcmp($b['conf'], $a['conf']); });
这样处理后,你的Users数组就会按照conf值从高到低有序排列啦!
内容的提问来源于stack exchange,提问作者Pavel Vorobyov
相关产品推荐
相关产品推荐

