php实现组合排序 代码实现

PHP实现组合排序代码示例
组合排序通常指按照多个字段或条件对数组进行排序。以下是几种常见的实现方式:
使用usort()自定义排序函数
$data = [
['name' => 'John', 'age' => 28, 'score' => 85],
['name' => 'Alice', 'age' => 25, 'score' => 95],
['name' => 'Bob', 'age' => 28, 'score' => 78]
];
usort($data, function($a, $b) {
// 先按age升序,再按score降序
if ($a['age'] != $b['age']) {
return $a['age'] - $b['age'];
}
return $b['score'] - $a['score'];
});
print_r($data);
使用array_multisort()实现多列排序
$data = [
['name' => 'John', 'age' => 28, 'score' => 85],
['name' => 'Alice', 'age' => 25, 'score' => 95],
['name' => 'Bob', 'age' => 28, 'score' => 78]
];
// 提取各列用于排序
$ages = array_column($data, 'age');
$scores = array_column($data, 'score');
// 先按age升序,再按score降序
array_multisort($ages, SORT_ASC, $scores, SORT_DESC, $data);
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', 28, 85),
new User('Alice', 25, 95),
new User('Bob', 28, 78)
];
usort($users, function($a, $b) {
// 先按age升序,再按name升序
if ($a->age != $b->age) {
return $a->age - $b->age;
}
return strcmp($a->name, $b->name);
});
foreach ($users as $user) {
echo "{$user->name}, {$user->age}, {$user->score}\n";
}
更复杂的组合排序逻辑
$products = [
['name' => 'Laptop', 'price' => 999, 'stock' => 5],
['name' => 'Mouse', 'price' => 25, 'stock' => 0],
['name' => 'Keyboard', 'price' => 45, 'stock' => 10]
];
usort($products, function($a, $b) {
// 优先按库存状态排序(有库存的在前)
if ($a['stock'] > 0 && $b['stock'] <= 0) {
return -1;
}
if ($a['stock'] <= 0 && $b['stock'] > 0) {
return 1;
}
// 其次按价格升序
return $a['price'] - $b['price'];
});
print_r($products);
这些示例展示了PHP中实现组合排序的不同方法,可以根据实际需求选择合适的实现方式。







