php排序实现
PHP 数组排序方法
PHP 提供了多种内置函数用于数组排序,根据需求可选择不同函数。以下是常用排序方法:
升序排序
sort() 函数对数组进行升序排序,重置键名:
$numbers = [4, 2, 8, 6];
sort($numbers);
print_r($numbers); // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
降序排序
rsort() 函数对数组进行降序排序,重置键名:
$numbers = [4, 2, 8, 6];
rsort($numbers);
print_r($numbers); // 输出: Array ( [0] => 8 [1] => 6 [2] => 4 [3] => 2 )
保持键值关联的升序排序
asort() 函数对关联数组按值升序排序,保持键名:
$age = ["Peter"=>35, "Ben"=>37, "Joe"=>43];
asort($age);
print_r($age); // 输出: Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )
保持键值关联的降序排序
arsort() 函数对关联数组按值降序排序,保持键名:

$age = ["Peter"=>35, "Ben"=>37, "Joe"=>43];
arsort($age);
print_r($age); // 输出: Array ( [Joe] => 43 [Ben] => 37 [Peter] => 35 )
按键名升序排序
ksort() 函数对关联数组按键名升序排序:
$age = ["Peter"=>35, "Ben"=>37, "Joe"=>43];
ksort($age);
print_r($age); // 输出: Array ( [Ben] => 37 [Joe] => 43 [Peter] => 35 )
按键名降序排序
krsort() 函数对关联数组按键名降序排序:
$age = ["Peter"=>35, "Ben"=>37, "Joe"=>43];
krsort($age);
print_r($age); // 输出: Array ( [Peter] => 35 [Joe] => 43 [Ben] => 37 )
自定义排序
usort() 函数允许自定义比较逻辑进行排序:

function cmp($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$numbers = [4, 2, 8, 6];
usort($numbers, "cmp");
print_r($numbers); // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
自然排序
natsort() 函数按自然顺序排序(人类习惯的数字顺序):
$images = ["img12.png", "img10.png", "img2.png", "img1.png"];
natsort($images);
print_r($images); // 输出: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )
多维数组排序
使用 array_multisort() 处理多维数组:
$data = [
['name' => 'John', 'age' => 25],
['name' => 'Alice', 'age' => 22],
['name' => 'Peter', 'age' => 30]
];
$ages = array_column($data, 'age');
array_multisort($ages, SORT_ASC, $data);
print_r($data);
// 输出: Array (
// [0] => Array ( [name] => Alice [age] => 22 )
// [1] => Array ( [name] => John [age] => 25 )
// [2] => Array ( [name] => Peter [age] => 30 )
// )
闭包排序(PHP 5.3+)
使用匿名函数简化自定义排序:
$numbers = [4, 2, 8, 6];
usort($numbers, function($a, $b) {
return $a <=> $b; // 太空船运算符
});
print_r($numbers); // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
注意事项
- 所有排序函数均直接修改原数组,而非返回新数组
- 排序函数成功时返回 true,失败时返回 false
- 对大型数据集建议使用时间复杂度更优的算法(如快速排序实现的
usort())






