PHP使用usort按布尔字段active和数字字段age实现多字段排序
实现方案
我们可以通过usort的自定义回调实现两级排序:第一级优先将active为true的元素前置,第二级相同active状态的元素按age数值升序排列,具体代码如下:
PHP 7+ 版本(推荐,使用太空船运算符简化判断)
// 替换$yourArray为你实际的数组变量 usort($yourArray, function ($a, $b) { // 第一优先级:active字段排序,true在前 $activeCompare = $b['active'] <=> $a['active']; if ($activeCompare !== 0) { return $activeCompare; } // 第二优先级:age字段升序 return $a['age'] <=> $b['age']; });
兼容PHP 5版本
// 替换$yourArray为你实际的数组变量 usort($yourArray, function ($a, $b) { // 先判断active优先级 if ($a['active'] && !$b['active']) { return -1; } if (!$a['active'] && $b['active']) { return 1; } // active状态相同,比较age if ($a['age'] === $b['age']) { return 0; } return $a['age'] < $b['age'] ? -1 : 1; });
执行上述代码后,数组就会输出符合要求的排序结果。
内容的提问来源于stack exchange,提问作者Hossein
相关产品推荐
相关产品推荐

