php实现排序
PHP 实现排序的方法
PHP 提供了多种内置函数和方法来实现数组排序,以下是常见的几种排序方式:
内置排序函数
sort()
对数组进行升序排序,直接修改原数组,不保留键名。
$numbers = [4, 2, 8, 6];
sort($numbers);
print_r($numbers); // 输出: [2, 4, 6, 8]
rsort()
对数组进行降序排序,直接修改原数组,不保留键名。
$numbers = [4, 2, 8, 6];
rsort($numbers);
print_r($numbers); // 输出: [8, 6, 4, 2]
asort()
对关联数组按值升序排序,保留键名。
$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
asort($ages);
print_r($ages); // 输出: ["Ben" => 25, "Peter" => 35, "Joe" => 43]
arsort()
对关联数组按值降序排序,保留键名。
$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
arsort($ages);
print_r($ages); // 输出: ["Joe" => 43, "Peter" => 35, "Ben" => 25]
ksort()
对关联数组按键名升序排序。
$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
ksort($ages);
print_r($ages); // 输出: ["Ben" => 25, "Joe" => 43, "Peter" => 35]
krsort()
对关联数组按键名降序排序。

$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
krsort($ages);
print_r($ages); // 输出: ["Peter" => 35, "Joe" => 43, "Ben" => 25]
自定义排序
usort()
使用用户自定义的比较函数对数组排序,不保留键名。
$numbers = [4, 2, 8, 6];
usort($numbers, function($a, $b) {
return $a <=> $b; // 升序排序
});
print_r($numbers); // 输出: [2, 4, 6, 8]
uasort()
使用用户自定义的比较函数对关联数组排序,保留键名。
$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
uasort($ages, function($a, $b) {
return $a <=> $b; // 升序排序
});
print_r($ages); // 输出: ["Ben" => 25, "Peter" => 35, "Joe" => 43]
uksort()
使用用户自定义的比较函数对关联数组的键名排序。
$ages = ["Peter" => 35, "Ben" => 25, "Joe" => 43];
uksort($ages, function($a, $b) {
return strcmp($a, $b); // 按键名字母升序排序
});
print_r($ages); // 输出: ["Ben" => 25, "Joe" => 43, "Peter" => 35]
多维数组排序
对多维数组排序可以使用 array_multisort() 或自定义比较函数。

array_multisort()
$data = [
["name" => "John", "age" => 25],
["name" => "Alice", "age" => 22],
["name" => "Bob", "age" => 30]
];
array_multisort(array_column($data, 'age'), SORT_ASC, $data);
print_r($data);
// 输出: [["name" => "Alice", "age" => 22], ["name" => "John", "age" => 25], ["name" => "Bob", "age" => 30]]
usort() 对多维数组排序
$data = [
["name" => "John", "age" => 25],
["name" => "Alice", "age" => 22],
["name" => "Bob", "age" => 30]
];
usort($data, function($a, $b) {
return $a['age'] <=> $b['age']; // 按 age 升序排序
});
print_r($data);
// 输出: [["name" => "Alice", "age" => 22], ["name" => "John", "age" => 25], ["name" => "Bob", "age" => 30]]
自然排序
natsort()
对字符串数组进行自然排序(如 "img1", "img2", "img10")。
$images = ["img10", "img1", "img2"];
natsort($images);
print_r($images); // 输出: ["img1", "img2", "img10"]
natcasesort()
对字符串数组进行不区分大小写的自然排序。
$images = ["Img10", "img1", "img2"];
natcasesort($images);
print_r($images); // 输出: ["img1", "img2", "Img10"]
总结
PHP 提供了丰富的排序函数,适用于不同的排序需求,包括简单数组、关联数组、多维数组以及自然排序。根据具体需求选择合适的函数即可高效完成排序任务。






