直接赋值空数组 $arr = [] 是最安全的清空索引数组方式,它不销毁变量、不触发键重排、保持引用一致性,且在所有 PHP 版本中行为统一。

直接赋值空数组是最安全的做法
PHP 中清空索引数组(即数字键数组)最可靠的方式就是 $arr = []。它不依赖数组结构、不触发键重排逻辑、不改变变量引用关系,且在所有 PHP 版本中行为一致。
常见错误是误用 unset($arr) —— 这会销毁变量本身,而不是清空内容;或者用 array_splice($arr, 0),虽能清空但返回被删元素,还可能干扰后续逻辑。
-
$arr = []后count($arr)返回0,array_keys($arr)返回空数组,符合“清空”预期 - 如果该数组被其他变量引用(如
$b = &$arr),赋值空数组后,$b也会变成空数组(PHP 引用机制决定) - 不要用
$arr = null:这会让is_array($arr)返回false,后续调用foreach($arr as ...)会报Invalid argument supplied for foreach()
用 array_values() 重置键时要小心场景
如果你的索引数组被清空后还要继续 push 新元素,且希望新元素从 0 开始连续编号,那单纯 $arr = [] 已足够。但若你是在清空前先做了 unset($arr[2]) 导致键不连续,再清空又重建,就可能误以为需要 array_values()。
实际上,清空操作本身不涉及键重排——只有重建后新增元素才会自然获得连续数字键。
立即学习“PHP免费学习笔记(深入)”;
-
array_values($arr)只应在你需要「把关联键数组转成索引数组」时使用,不是清空手段 - 对已清空的数组执行
array_values([])没有意义,返回仍是[] - 在循环中边遍历边
unset再调array_values是典型性能陷阱,不如直接重建数组
别碰 reset() 和 key() —— 它们根本不清空
新手常搜到 reset($arr) 或 key($arr),但这两个函数只操作数组内部指针,和内容清空完全无关。
执行 reset($arr) 后:count($arr) 不变,isset($arr[0]) 仍取决于原数组是否有键 0,没有任何清空效果。
-
reset()、next()、current()都是为遍历服务的,不是数据操作函数 - 试图靠移动指针“跳过”元素来模拟清空,会导致逻辑混乱,且
foreach仍会遍历全部元素 - 这类函数在 PHP 8.4+ 对空数组会返回
false,容易引发未处理的警告



















