php实现组合排序 代码实现
PHP实现组合排序代码示例
组合排序通常指对多维数组或多条件进行排序。以下是几种常见实现方式:

使用array_multisort函数
$data = [
['name' => 'John', 'age' => 25, 'score' => 80],
['name' => 'Alice', 'age' => 30, 'score' => 90],
['name' => 'Bob', 'age' => 25, 'score' => 85]
];
// 提取排序字段
$ages = array_column($data, 'age');
$scores = array_column($data, 'score');
// 先按age升序,再按score降序
array_multisort($ages, SORT_ASC, $scores, SORT_DESC, $data);
print_r($data);
使用usort自定义排序
$data = [
['name' => 'John', 'age' => 25, 'score' => 80],
['name' => 'Alice', 'age' => 30, 'score' => 90],
['name' => 'Bob', 'age' => 25, 'score' => 85]
];
usort($data, function($a, $b) {
if ($a['age'] == $b['age']) {
return $b['score'] - $a['score']; // score降序
}
return $a['age'] - $b['age']; // age升序
});
print_r($data);
对象集合排序
class User {
public $name;
public $age;
public $score;
public function __construct($name, $age, $score) {
$this->name = $name;
$this->age = $age;
$this->score = $score;
}
}
$users = [
new User('John', 25, 80),
new User('Alice', 30, 90),
new User('Bob', 25, 85)
];
usort($users, function($a, $b) {
return [$a->age, $b->score] <=> [$b->age, $a->score];
});
foreach ($users as $user) {
echo "{$user->name}, {$user->age}, {$user->score}\n";
}
多字段动态排序
function multiSort(array &$array, array $sortCriteria) {
usort($array, function($a, $b) use ($sortCriteria) {
foreach ($sortCriteria as $field => $order) {
if ($a[$field] != $b[$field]) {
return ($order === SORT_ASC)
? $a[$field] <=> $b[$field]
: $b[$field] <=> $a[$field];
}
}
return 0;
});
}
$data = [
['name' => 'John', 'age' => 25, 'score' => 80],
['name' => 'Alice', 'age' => 30, 'score' => 90],
['name' => 'Bob', 'age' => 25, 'score' => 85]
];
multiSort($data, ['age' => SORT_ASC, 'score' => SORT_DESC]);
print_r($data);
以上示例展示了PHP中实现组合排序的多种方法,可根据实际需求选择合适的方式。array_multisort适合简单场景,usort提供更灵活的定制,而最后的多字段动态排序函数则提供了可配置的解决方案。






