PHP冒泡排序核心是三步:外层控轮数、内层挨个比、满足条件即交换;支持基础双循环+临时变量交换,也兼容PHP 8.2解构赋值、类型声明与$swapped提前终止优化,并可生成步骤快照供前端动画使用。

PHP冒泡排序法核心就三步:外层控制轮数、内层挨个比较、满足条件就交换。它不依赖扩展,纯原生语法就能跑通,特别适合理解排序逻辑。
基础写法:双循环+手动交换
这是最直观、兼容性最强的写法,PHP 5.6 以上都适用:
- 先用 count($arr) 获取数组长度 $n
- 外层循环 $i 从 0 到 $n-2,共执行 $n-1 轮
- 内层循环 $j 从 0 到 $n-$i-2,每轮范围递减(因为末尾已有序)
- 用 if ($arr[$j] > $arr[$j+1]) 判断是否需要交换
- 交换用临时变量最稳妥:$temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp;
现代写法:解构赋值+类型声明(推荐PHP 8.2+)
代码更简洁,语义更清晰,还能提前拦截错误输入:
- 函数加类型提示:function bubbleSort(array $arr): array
- 交换改用解构赋值:[$arr[$j], $arr[$j+1]] = [$arr[$j+1], $arr[$j]];(PHP 7.1+ 支持,8.2 更稳定)
- 加入 $swapped 标志位:某轮没发生任何交换,说明已有序,直接 break 外层循环
- 这样在近乎有序数据下能明显提速,避免无谓遍历
带步骤记录:为前端动画提供数据支持
PHP 本身不画动画,但可以生成每轮快照,交给前端渲染“气泡上浮”效果:
立即学习“PHP免费学习笔记(深入)”;
- 初始化 $steps = [$arr] 存原始状态
- 每轮内层循环结束后,追加当前数组:$steps[] = $arr;(注意是值拷贝)
- 最后用 json_encode($steps, JSON_UNESCAPED_UNICODE) 输出,中文和数字都能正常显示
- 前端 JS 拿到这个 JSON,用定时器逐帧展示,配合 CSS transition 就能做出流畅动画
测试与验证小技巧
别只用一个数组测,多准备几组典型数据:
- 乱序数组:[64, 34, 25, 12, 22, 11, 90] —— 验证基本功能
- 已排序数组:[1, 2, 3, 4, 5] —— 检查提前终止是否生效
- 倒序数组:[5, 4, 3, 2, 1] —— 看是否真跑满 $n-1 轮
- 含重复值:[3, 1, 4, 1, 5] —— 冒泡是稳定排序,相同值相对位置不应变



















