PHP按自定义字母顺序(C→A→B)对关联数组排序的实现方法
用PHP的
usort实现自定义顺序(C→A→B)排序 嘿,这个需求我刚好处理过,用usort完全能搞定!核心思路是给你要排序的letter类型分配一个优先级权重,然后在回调函数里通过比较权重来实现自定义顺序。
具体实现步骤
- 首先定义一个优先级映射数组,把你想要的排序顺序转换成可比较的数字:
$priority = [ 'C' => 0, // C优先级最高,排最前面 'A' => 1, // 其次是A 'B' => 2 // B优先级最低,排最后 ]; - 然后使用
usort,在回调函数中获取两个元素的letter对应的权重,比较权重值即可:
完整代码示例
$array = [ 0 => ['name' => 'John', 'age' => 24, 'letter' => 'A'], 1 => ['name' => 'Nathan', 'age' => 24, 'letter' => 'B'], 2 => ['name' => 'Andy', 'age' => 26, 'letter' => 'C'], // 可以再加几个测试元素验证效果 3 => ['name' => 'Zoe', 'age' => 22, 'letter' => 'A'], 4 => ['name' => 'Lily', 'age' => 25, 'letter' => 'C'], ]; // 定义优先级映射 $priority = ['C' => 0, 'A' => 1, 'B' => 2]; // 执行排序 usort($array, function($a, $b) use ($priority) { // 取出两个元素的letter对应的优先级 $aPriority = $priority[$a['letter']]; $bPriority = $priority[$b['letter']]; // 比较优先级,返回对应结果 return $aPriority - $bPriority; }); // 打印排序后的结果 print_r($array);
代码解释
use ($priority)是为了让匿名函数能访问外部定义的优先级数组;- 回调函数返回
$aPriority - $bPriority:- 如果
$a的优先级小于$b(比如C和A,0-1=-1),返回负数,$a会排在$b前面; - 相等则返回0,顺序保持原数组中的相对位置(PHP 7+的
usort是稳定排序); - 如果
$a的优先级大于$b,返回正数,$a会排在$b后面。
- 如果
这样运行后,数组就会严格按照C→A→B的顺序排列啦!
内容的提问来源于stack exchange,提问作者vasya
相关产品推荐
相关产品推荐

