php排序的实现
数组排序函数
PHP提供了多种内置函数用于数组排序,适用于不同场景:
sort():对数组升序排序(值重排,键重置为数字索引)rsort():对数组降序排序asort():保持键值关联的升序排序arsort():保持键值关联的降序排序ksort():按键名升序排序krsort():按键名降序排序
$numbers = [3, 1, 4];
sort($numbers); // 结果: [1, 3, 4]
自定义排序
使用usort()、uasort()或uksort()实现自定义排序逻辑,需提供比较函数:
function compareLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["apple", "banana", "cherry"];
usort($words, "compareLength");
// 结果: ["apple", "cherry", "banana"]
多维度数组排序
对多维数组排序可通过自定义比较函数实现:
$users = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30]
];
usort($users, function($a, $b) {
return $a['age'] <=> $b['age'];
});
自然排序
natsort()实现自然顺序排序(如:img1, img2, img10):
$files = ["img12", "img10"];
natsort($files); // 结果: ["img10", "img12"]
对象排序
使用usort()配合对象属性比较:
class User {
public $age;
}
$users = [new User(25), new User(30)];
usort($users, fn($a, $b) => $a->age <=> $b->age);
稳定排序实现
PHP原生排序非稳定,可通过保留原索引实现稳定排序:
function stableSort($array, $cmp) {
$indexed = array_map(fn($v, $i) => [$v, $i], $array, array_keys($array));
usort($indexed, fn($a, $b) => $cmp($a[0], $b[0]) ?: $a[1] <=> $b[1]);
return array_column($indexed, 0);
}
性能注意事项
- 大数组推荐使用
SplHeap或SplPriorityQueue - 排序前考虑是否需要保留原数组键值关系
- 复杂排序条件可结合
array_multisort()实现







