如何在PHP中按count字段降序排序多维数组?
如何对PHP多维数组按count字段降序排序?
别担心,你选usort()其实完全找对方向了!问题大概率出在回调函数的逻辑上,我给你写个能直接跑的解决方案,再一步步给你讲清楚:
首先先把你的原数组转成标准PHP格式:
$array = [ ['count' => 9, 'slug' => 'concediat-reangajat'], ['count' => 7, 'slug' => 'salarii-5togo'], ['count' => 10, 'slug' => 'piata-fortei-munca'], ['count' => 3, 'slug' => 'productivitate-angajati'], ['count' => 1, 'slug' => 'stocare-date'], ['count' => 4, 'slug' => 'infrastructura-leadership'], ['count' => 2, 'slug' => 'airbnb-uber'], ['count' => 5, 'slug' => 'salarii-productivitate'], ['count' => 2, 'slug' => 'ceo-resurse-umane'], ['count' => 3, 'slug' => 'hr-ceo'], ['count' => 1, 'slug' => 'burnout-tratament'], ['count' => 1, 'slug' => 'angajati-vanzarea-afacerii'], ['count' => 1, 'slug' => 'job-linkedin'], ['count' => 1, 'slug' => 'primul-faliment'], ['count' => 3, 'slug' => 'salariu-mic'], ['count' => 1, 'slug' => 'varsta-programatori'], ];
方案一:PHP7+ 简洁写法(推荐)
用PHP7引入的太空船运算符<=>,一行搞定比较逻辑,降序排序只需要把两个比较对象反过来:
// 按count字段降序排序 usort($array, function($a, $b) { return $b['count'] <=> $a['count']; }); // 打印验证结果 echo '<pre>'; print_r($array); echo '</pre>';
方案二:兼容PHP5.x的写法
如果你还在用PHP5版本,就用传统的if-else判断返回值:
usort($array, function($a, $b) { if ($a['count'] == $b['count']) { return 0; // 两个count相等时保持原顺序 } // 降序:b的count更大就返回-1,让b排在前面 return ($a['count'] < $b['count']) ? 1 : -1; }); // 打印结果 echo '<pre>'; print_r($array); echo '</pre>';
为什么之前可能失败?
- 你可能搞反了比较顺序:升序是
$a['count'] <=> $b['count'],降序必须反过来用$b在前 - 或者没正确访问子数组的
count键,比如拼写错误(PHP数组键是区分大小写的) ksort()是用来对数组的键排序的,你的需求是对值(子数组的count)排序,所以用它肯定没用啦
运行上面的代码后,数组就会按count从大到小排列,第一个元素就是count=10的那个,完美符合你的需求~
内容的提问来源于stack exchange,提问作者ANGELA
相关产品推荐
相关产品推荐

