PHP多维数组双规则排序:0值项后置+label升序
修正组合排序函数以实现预期效果
我来帮你修正这个组合排序函数,完全满足你「将countValue为0的行移至数组末尾,并按label值升序排序」的需求:
修正后的排序函数
public function sortOptionsByCountsAndByName($a, $b) { // 处理其中一个countValue为0的情况 if ($a['countValue'] == 0 && $b['countValue'] != 0) { // a是0,b不是0,a应该排在后面,返回1 return 1; } if ($b['countValue'] == 0 && $a['countValue'] != 0) { // b是0,a不是0,b应该排在后面,返回-1 return -1; } // 两者都是0或者都不是0,按label升序排序 return $this->sortOptionsByName($a, $b); }
逻辑说明
- 优先处理0值行:通过两个条件判断,确保所有
countValue不为0的行都排在0值行前面:- 当
a是0而b不是时,让a往后排(返回1表示a应该在b之后) - 当
b是0而a不是时,让b往后排(返回-1表示a应该在b之前)
- 当
- 统一按label排序:当两者同是0或同非0时,直接复用你已有的
sortOptionsByName函数完成label的升序排序(注意必须return这个函数的返回值,之前的代码就是漏掉了return导致排序无效)
使用方式
调用PHP的usort函数来应用这个排序规则:
usort($array, [$this, 'sortOptionsByCountsAndByName']);
这样处理后,你的数组就会完全符合预期的排序结果啦。
内容的提问来源于stack exchange,提问作者Alex Bogias
相关产品推荐
相关产品推荐

