array_reverse() 不会改动原数组,因为它是一个纯函数,仅返回新数组副本,原数组的值、键名和结构均保持不变。

不会改动原数组。array_reverse() 是一个纯函数,它只读取输入数组,返回一个全新顺序的副本,原始数组内容、键名、结构完全保持不变。
为什么原数组不受影响
PHP 中数组是值传递(对普通数组而言),array_reverse() 内部不使用引用操作,也不调用任何修改原变量的机制。无论你传入索引数组还是关联数组,只要不显式重新赋值,原变量就始终如初。
- $arr = ['a', 'b', 'c'];
- $rev = array_reverse($arr);
- // 此时 $arr 还是 ['a', 'b', 'c'],未发生任何变化
- // $rev 才是 ['c', 'b', 'a']
常见误解澄清
有人误以为设置 preserve_keys = true 就会“修改原数组”,其实不然——这个参数只控制返回结果中是否保留原始键名,和原数组是否被改动毫无关系。
- $assoc = ['x' => 1, 'y' => 2];
- array_reverse($assoc, true); // 返回 ['y'=>2, 'x'=>1],但 $assoc 仍是原样
- print_r($assoc); // 输出仍为 Array ( [x] => 1 [y] => 2 )
想让原变量变成反转后的内容?得手动赋值
如果业务逻辑需要“原地反转”效果,必须显式把结果再赋给原变量:
- $data = [10, 20, 30];
- $data = array_reverse($data); // 这一步才是覆盖原变量
- // 现在 $data 变成了 [30, 20, 10]
多维数组也一样安全
即使数组嵌套很深,array_reverse() 依然只反转最外层数组的元素顺序,内部子数组本身不被修改,更不会递归篡改原始结构。
- $matrix = [[1,2], [3,4], [5,6]];
- $new = array_reverse($matrix);
- // $matrix 不变;$new 是 [[5,6], [3,4], [1,2]],每个子数组内容照旧
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











