这在很大程度上取决于你的意思。
要清空当前参考,您可以随时执行
$array = array();
从范围中完全删除当前实例
unset($array);
不幸的是,这两种情况并不一定意味着与每个元素关联的内存被释放。
PHP 为您的变量使用称为“引用”的东西。您的变量实际上是指向数据的标签或引用,而不是数据的实际容器。PHP垃圾收集器可以提供有关此主题的更多见解。
现在看看这个例子,取自文档:
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( 'a' );# a: (refcount=3, is_ref=0)='new string'
unset( $b, $c );
xdebug_debug_zval( 'a' );# a: (refcount=1, is_ref=0)='new string'
不幸的是,这适用于您的所有变量。包括数组。恐怕清理与数组相关的内存是一个完全不同的主题。
我注意到评论中关于在每个单独的键上使用 unset() 的讨论更长。
这感觉是非常糟糕的做法。考虑以下代码:
class A{
function __construct($name){$this->name=$name;}
function __destruct(){echo $this->name;}
}
$a=array();
$b=array();
$c=array();
for($i=0;$i<5;$i++) {
$a[]=new A('a');
$b[]=new A('b');
$c[]=new A('c');
}
unset($a);
$b=array();
echo PHP_EOL.'done'.PHP_EOL;
这将输出:
aaaaabbbbb
done
ccccc
当对特定数据结构的引用达到 0 时,它会从内存中清除。两者=array()
都会unset
做同样的事情。
现在,如果您实际上不需要array()
,可以使用null
:
$array=null;
这会将标签保留在内存中,但会删除它对任何特定数据的引用。