php sort 实现
PHP 数组排序实现
PHP 提供了多种内置函数对数组进行排序,每种函数适用于不同的排序需求和数组类型。以下是常见的排序方法及其实现方式:
升序排序(sort)
对数组值进行升序排序,键名会被重新索引:
$array = [3, 1, 4, 2];
sort($array);
print_r($array); // 输出: [1, 2, 3, 4]
降序排序(rsort)
对数组值进行降序排序,键名会被重新索引:
$array = [3, 1, 4, 2];
rsort($array);
print_r($array); // 输出: [4, 3, 2, 1]
保持键值关联的升序排序(asort)
对数组值进行升序排序,但保持键值与元素的关联:
$array = ["b" => 2, "a" => 1, "c" => 3];
asort($array);
print_r($array); // 输出: ["a" => 1, "b" => 2, "c" => 3]
保持键值关联的降序排序(arsort)
对数组值进行降序排序,但保持键值与元素的关联:
$array = ["b" => 2, "a" => 1, "c" => 3];
arsort($array);
print_r($array); // 输出: ["c" => 3, "b" => 2, "a" => 1]
按键名升序排序(ksort)
对数组的键名进行升序排序:
$array = ["b" => 2, "a" => 1, "c" => 3];
ksort($array);
print_r($array); // 输出: ["a" => 1, "b" => 2, "c" => 3]
按键名降序排序(krsort)
对数组的键名进行降序排序:
$array = ["b" => 2, "a" => 1, "c" => 3];
krsort($array);
print_r($array); // 输出: ["c" => 3, "b" => 2, "a" => 1]
自然排序(natsort)
对字符串数组进行自然排序(如人类理解的顺序):
$array = ["img10", "img2", "img1"];
natsort($array);
print_r($array); // 输出: ["img1", "img2", "img10"]
自定义排序(usort / uasort / uksort)
通过回调函数自定义排序逻辑:
$array = [3, 1, 4, 2];
usort($array, function($a, $b) {
return $a <=> $b; // 升序排序
});
print_r($array); // 输出: [1, 2, 3, 4]
多维数组排序
对多维数组按指定字段排序:
$users = [
["name" => "Alice", "age" => 30],
["name" => "Bob", "age" => 25],
["name" => "Charlie", "age" => 35]
];
usort($users, function($a, $b) {
return $a["age"] <=> $b["age"]; // 按年龄升序
});
print_r($users);
注意事项
- 默认的
sort和rsort会重置键名,适合索引数组。 asort和arsort适合关联数组,保留键值关系。- 自然排序(
natsort)适用于包含数字的字符串排序。 - 自定义排序(
usort)可以实现复杂的排序逻辑。







