PHP数组排序优先使用内置函数(如sort、usort等),其底层由C实现且高效;手动实现时可选冒泡、选择或快速排序等算法,但仅适用于学习或特殊场景。

PHP中数组排序不仅依赖算法,更常用的是内置函数来实现。虽然底层会涉及经典排序算法,但开发者通常通过函数调用完成操作。以下是常见排序方式和其背后的逻辑。
1. PHP内置排序函数(最常用)
PHP提供了多个函数用于数组排序,适合大多数实际开发场景:
- sort():对索引数组进行升序排序,重置键名
- rsort():降序排序索引数组
- asort():按值对关联数组升序排序,保留键值关联
- arsort():按值降序排序关联数组
- ksort():按键名升序排序关联数组
- krsort():按键名降序排序
- usort():使用自定义比较函数排序数组
示例:
$fruits = ['banana', 'apple', 'orange']; sort($fruits); // 结果:['apple', 'banana', 'orange']
2. 常见排序算法在PHP中的实现
如果需要手动实现排序算法(如面试或学习),以下是几种经典算法的PHP写法:
立即学习“PHP免费学习笔记(深入)”;
冒泡排序(Bubble Sort)
function bubbleSort($arr) {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
选择排序(Selection Sort)
1.修正BUG站用资源问题,优化程序2.增加关键词搜索3.修改报价4.修正BUG 水印问题5.修改上传方式6.彻底整合论坛,实现一站通7.彻底解决群发垃圾信息问题。注册会员等发垃圾邮件7.彻底解决数据库安全9.修改交易方式.增加网站担保,和直接交易两中10.全站可选生成html.和单独新闻生成html(需要装组建)11. 网站有10中颜色选择适合不同的行业不同的颜色12.修改竞价格排名方式13.修
function selectionSort($arr) {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
$minIndex = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j;
}
}
if ($minIndex != $i) {
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
return $arr;
}
快速排序(Quick Sort)
function quickSort($arr) {
if (count($arr) <= 1) {
return $arr;
}
$pivot = $arr[0];
$left = $right = [];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] < $pivot) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
3. 自定义排序与多维数组排序
处理复杂数据时,比如按多维数组中某个字段排序,可用 usort 配合匿名函数:
$users = [
['name' => 'Alice', 'age' => 30],
['name' => 'Bob', 'age' => 25],
['name' => 'Charlie', 'age' => 35]
];
usort($users, function($a, $b) {
return $a['age'] <=> $b['age']; // 升序
});
使用“”太空船运算符可简化比较逻辑。
4. 性能与选择建议
不同算法适用场景不同:
- 冒泡排序简单但效率低,适合教学或小数据集
- 选择排序比冒泡略优,但仍为 O(n²)
- 快速排序平均性能为 O(n log n),适合大数据
- 实际开发优先使用 sort()、usort() 等内置函数,它们底层用C实现,效率更高
基本上就这些。日常开发用内置函数足够,理解算法有助于深入掌握逻辑。










