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

$age = ["Peter" => 35, "Ben" => 20, "Joe" => 43];
asort($age);
print_r($age); // 输出: Array ( [Ben] => 20 [Peter] => 35 [Joe] => 43 )
保持键值关联的降序排序(arsort)
arsort() 对关联数组按值降序排序:
$age = ["Peter" => 35, "Ben" => 20, "Joe" => 43];
arsort($age);
print_r($age); // 输出: Array ( [Joe] => 43 [Peter] => 35 [Ben] => 20 )
按键名升序排序(ksort)
ksort() 根据键名对数组升序排序:
$age = ["Peter" => 35, "Ben" => 20, "Joe" => 43];
ksort($age);
print_r($age); // 输出: Array ( [Ben] => 20 [Joe] => 43 [Peter] => 35 )
按键名降序排序(krsort)
krsort() 根据键名对数组降序排序:

$age = ["Peter" => 35, "Ben" => 20, "Joe" => 43];
krsort($age);
print_r($age); // 输出: Array ( [Peter] => 35 [Joe] => 43 [Ben] => 20 )
自然排序(natsort)
natsort() 使用自然顺序算法排序(适合含数字的字符串):
$files = ["img12.png", "img10.png", "img2.png"];
natsort($files);
print_r($files); // 输出: Array ( [2] => img2.png [1] => img10.png [0] => img12.png )
自定义排序(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 )
多维数组排序
使用 array_multisort() 处理多维数组:
$data = [
["name" => "John", "age" => 25],
["name" => "Jane", "age" => 22]
];
$ages = array_column($data, 'age');
array_multisort($ages, SORT_ASC, $data);
print_r($data);
注意事项
- 排序函数多数直接修改原数组,而非返回新数组
- 关联数组排序需根据需求选择
asort或ksort系列函数 - 对大量数据排序时,自定义函数可能影响性能






