array_reverse()默认重置数字键为连续索引,设preserve_keys为true可保留原始键名(含字符串键和非连续数字键),仅反转元素顺序而不按键值排序。

PHP 的 array_reverse() 默认会重置键名(即把关联键变成数字索引),这是它的默认行为,不是“丢失”,而是有意为之。要保留原始键名,只需传入第二个参数 true 即可。
用 preserve_keys = true 保留原键名
这是最直接的解决方法:调用 array_reverse($array, true)。第二个参数设为 true 时,函数会保持原有键名不变,只反转元素顺序。
-
注意:即使原数组是关联数组(如
['a' => 1, 'b' => 2]),开启该选项后结果仍是['b' => 2, 'a' => 1],键名不重排、不丢弃 - 若原数组是纯数字索引(如
[0 => 1, 1 => 2, 2 => 3]),开启后仍为数字键,但顺序反转 →[2 => 3, 1 => 2, 0 => 1]
为什么默认会“重置”键名?
因为 array_reverse($arr)(不带第二个参数)的设计目标是返回一个“标准索引数组”——类似 array_values() 的效果,它会忽略原键,从 0 开始重新编号。这在处理简单列表时更直观,但对关联结构不友好。
手动恢复键名?一般不需要
除非你误用了默认方式且无法重调用,否则没必要手动重建键名。如果真遇到这种情况(比如已得到重编号的数组),且你还记得原始键顺序,可用 array_combine() 配合 array_keys() 和 array_values() 拼接,但逻辑复杂、易出错,远不如一开始就加 true 参数可靠。
立即学习“PHP免费学习笔记(深入)”;
小提醒:键名类型不影响保留逻辑
字符串键、整数键、混合键都能被 array_reverse($arr, true) 正确保留。唯一例外是当数字键不连续或非递增时(如 [5 => 'x', 0 => 'y']),反转后仍是 [0 => 'y', 5 => 'x'] —— 键名照旧,顺序按值的位置反转,不是按键名大小排序。



















