PHP清空数组的几种正确写法与区别

在 PHP 开发中,清空数组是高频操作,但很多人分不清“清空元素但保留变量”和“彻底销毁变量”的区别,误用会导致后续逻辑报错。本文梳理三种常用写法,并说明它们的适用场景与坑点,适合新手和日常代码审查时对照。

一、$arr = []:重新赋值(最常用)

直接给数组赋一个空数组,变量本身仍然存在,只是内容被替换为空。

$arr = [1, 2, 3];
$arr = [];
// $arr 现在是空数组,后续还能继续 push
$arr[] = 4;

适合循环处理、分页结果重置、缓存清空等场景,是日常开发最推荐的写法。性能开销小,逻辑直观,不会产生未定义变量警告。

二、unset($arr):彻底销毁变量

unset 会把变量本身从内存中删除,再次访问会抛出 Undefined variable 警告。

$arr = [1, 2, 3];
unset($arr);
// 再次使用 $arr 会触发未定义变量警告

如果只想清空数组内容、保留变量,不要用 unset;unset 适合确认不再使用该变量、主动释放内存的场景。

如果只想删除数组中的某个元素,而不是清空整个数组:

unset($arr['key']);

三、array_splice 清空全部元素

array_splice 可以一次性移除从指定下标开始的全部元素:

$arr = [1, 2, 3];
array_splice($arr, 0);
// $arr 现在为空

这种写法较少单独使用,一般在需要连带保持数组引用关系时才考虑。

常见坑

  1. 混淆“清空”和“销毁”:需要保留变量就用 = [],不要用 unset。
  2. 引用传参后清空:若数组被多个变量引用,= [] 只替换当前变量指向,不会影响原引用,必要时改用传引用清空。
  3. 不要用 $arr = null 代替清空:null 和空数组在 isset、empty、count 判断下行为不同,count(null) 在高版本 PHP 会告警。
  4. 超大数组释放:数组占用大量内存时,unset 后可配合 gc_collect_cycles() 主动回收。

总结

日常清空数组优先 $arr = [];确认不再使用变量才用 unset($arr);删除单个元素用 unset($arr['key'])。选对写法,能避免大量“未定义变量”和类型判断的隐性 bug,让代码更健壮。


emer 发布于  2026-11-14 07:28 
'); })();