如何根据自定义值对PHP数组按POSITION字段排序
按自定义职位顺序排序PHP数组
解决方案一:使用usort()自定义排序规则(支持重复职位)
这种方法适合数组中存在多个相同职位员工的场景,能保留所有元素并完成排序。
- 定义原始数组和自定义排序的优先级映射:
// 原始员工数组 $employees = [ ["POSITION" => "Marketer", "FIRSTNAME" => "John1", "EMAIL" => "example1@mail.com"], ["POSITION" => "Designer", "FIRSTNAME" => "John2", "EMAIL" => "example2@mail.com"], ["POSITION" => "CEO", "FIRSTNAME" => "John3", "EMAIL" => "example3@mail.com"], ["POSITION" => "Developer", "FIRSTNAME" => "John4", "EMAIL" => "example4@mail.com"] ]; // 自定义职位优先级:数值越小,排序越靠前 $positionPriority = [ 'CEO' => 0, 'Marketer' => 1, 'Developer' => 2, 'Designer' => 3 ];
- 调用
usort()执行排序:
usort($employees, function($a, $b) use ($positionPriority) { // 通过优先级数值的差值决定排序顺序 return $positionPriority[$a['POSITION']] - $positionPriority[$b['POSITION']]; });
执行后,$employees会严格按照CEO → Marketer → Developer → Designer的顺序排列。
解决方案二:分组后按顺序重组(适合职位唯一的场景)
如果数组中每个职位仅对应一个员工,可以用更直观的分组重组方式:
// 按职位作为键,对员工数组分组 $groupedEmployees = array_column($employees, null, 'POSITION'); // 按自定义顺序遍历,组装排序后的数组 $sortedEmployees = []; $targetOrder = ['CEO', 'Marketer', 'Developer', 'Designer']; foreach ($targetOrder as $position) { if (isset($groupedEmployees[$position])) { $sortedEmployees[] = $groupedEmployees[$position]; } }
这种方法逻辑简单,但array_column会覆盖重复职位的元素,仅适用于职位唯一的场景。
内容的提问来源于stack exchange,提问作者bakar
相关产品推荐
相关产品推荐

