PHP 数组排序
PHP 提供了多种强大的数组排序函数,可以满足各种排序需求。
本章节介绍了 PHP 函数库中的数组排序方法,包括基本排序、自定义排序、多维数组排序等高级技巧。
PHP 基本排序
1. sort() - 标准升序排序
用于对数组元素进行升序排列,重新建立数字索引(0,1,2...)。适用于不需要保留原始键名的简单数值或字符串数组排序。
✅ 下面使用sort()
函数演示数组的值升序排序:
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[0] => apple
[1] => banana
[2] => lemon
[3] => orange
)
2. rsort() - 标准降序排序
用于对数组元素进行降序排列,同时重置数字索引。与sort()
函数功能相反,适合需要反向排序的场景。
✅ 下面使用rsort()
函数演示数组的值降序排序:
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[0] => orange
[1] => lemon
[2] => banana
[3] => apple
)
3. ksort() - 键名升序排序
按照键名的字典顺序进行升序排列,同时保持键值对应关系。常用于需要按键名字母顺序整理的数据。
✅ 下面使用ksort()
函数演示键名升序排序:
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
4. krsort() - 键名降序排序
按照键名字典顺序进行降序排列,同时维持键值对应关系。与ksort()
排序方向相反,适合反向键名排序需求。
✅ 下面使用krsort()
函数演示键名降序排序:
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
5. asort() - 关联数组值升序排序
在保持键值对关联关系的情况下,对数组值进行升序排序。特别适合需要保留键名对应关系的关联数组排序。
✅ 下面使用asort()
函数演示关联数组值升序排序:
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
asort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[c] => apple
[b] => banana
[d] => lemon
[a] => orange
)
6. arsort() - 关联数组值降序排序
保持键值关联的同时,按数组值进行降序排序。与asort()
函数排序方向相反,但同样保留原始键名。
✅ 下面使用arsort()
函数演示关联数组值降序排序:
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort($fruits);
print_r($fruits);
✅ 输出结果:
Array
(
[a] => orange
[d] => lemon
[b] => banana
[c] => apple
)
PHP 自定义排序
1. usort() - 使用用户自定义函数对值排序
usort()
由于使用自定义函数进行比较,性能通常不如内置的排序函数(如sort()
)。在对大型数组排序时,应考虑性能影响。
✅ 下面使用usort()
函数演示使用用户自定义函数对值排序:
$fruits = ["apple", "orange", "banana", "kiwi", "pear"];
usort($fruits, function($a, $b) {
return strlen($a) <=> strlen($b);
});
print_r($fruits);
✅ 输出结果:
Array ( [0] => pear [1] => kiwi [2] => apple [3] => orange [4] => banana )
2. uasort() - 使用自定义函数保持索引关联排序
uasort()
会保持键值关联,这与usort()
不同,后者会重新索引数组。
✅ 下面使用uasort()
函数演示使用自定义函数保持索引关联排序:
$fruits = [
'a' => 'orange',
'b' => 'banana',
'c' => 'apple',
'd' => 'grape'
];
// 自定义比较函数
function compare($a, $b) {
return strcmp($a, $b);
}
// 使用uasort排序
uasort($fruits, 'compare');
print_r($fruits);
✅ 输出结果:
Array
(
[c] => apple
[b] => banana
[d] => grape
[a] => orange
)
3. uksort() - 使用自定义函数按键名排序
uksort()
会保留键名,这与usort()
不同(usort()
会重新索引数字键)
✅ 下面使用uksort()
函数演示使用自定义函数按键名排序:
function compareKeys($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = ["banana" => "yellow", "apple" => "red", "orange" => "orange"];
uksort($array, "compareKeys");
print_r($array);
✅ 输出结果:
Array
(
[apple] => red
[banana] => yellow
[orange] => orange
)
PHP 多维数组排序
1. 使用 usort 对多维数组排序
usort()
允许你使用自定义的比较函数对数组进行排序。对于多维数组的排序尤其有用。
✅ 下面使用uksort()
函数演示使用 usort 对多维数组排序:
$people = [
["name" => "John", "age" => 28],
["name" => "Jane", "age" => 24],
["name" => "Doe", "age" => 32]
];
// 按age升序排序
usort($people, function($a, $b) {
return $a['age'] <=> $b['age'];
});
print_r($people);
✅ 输出结果:
Array (
[0] => Array ( [name] => Jane [age] => 24 )
[1] => Array ( [name] => John [age] => 28 )
[2] => Array ( [name] => Doe [age] => 32 )
)
2. 使用 array_multisort 对多维数组排序
array_multisort()()
可以同时对多个数组进行排序,或者对一个多维数组的多个维度进行排序。
✅ 下面使用array_multisort()
函数演示对多维数组排序:
$data = [
['name' => 'John', 'age' => 25, 'score' => 85],
['name' => 'Alice', 'age' => 30, 'score' => 92],
['name' => 'Bob', 'age' => 20, 'score' => 78],
['name' => 'Charlie', 'age' => 28, 'score' => 88]
];
// 提取要排序的列
$ages = array_column($data, 'age');
$scores = array_column($data, 'score');
// 先按年龄升序,再按分数降序排列
array_multisort($ages, SORT_ASC, $scores, SORT_DESC, $data);
print_r($data);
✅ 输出结果:
Array
(
[0] => Array
(
[name] => Bob
[age] => 20
[score] => 78
)
[1] => Array
(
[name] => John
[age] => 25
[score] => 85
)
[2] => Array
(
[name] => Charlie
[age] => 28
[score] => 88
)
[3] => Array
(
[name] => Alice
[age] => 30
[score] => 92
)
)
完整的 PHP Array 参考手册
如需获取更全面的数组函数参考信息,请查阅我们的 PHP 数组函数手册。
该参考手册详细介绍了每个函数的功能说明和实际应用示例。
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈