如果我可以使用相同的变量名重新声明,为什么要使用 unset() 来清除数组


Why Use unset() To Clear Array If I Can Re-Declare Using Same Variable Name?

我想知道我是否处于这种情况:

$data = array ("red", "green", "blue");
$data = array ("yellow", "pink", "grey");
print_r($data);

有什么不同比这个:

$data = array ("red", "green", "blue");
unset($data);
$data = array ("yellow", "pink", "grey");
print_r($data);

清除数组的方法相同。 那么我们什么时候应该使用unset()

例如,您可以使用unset()清除数组的各个部分。

我有多个用例,我需要删除数组的最后一个条目。所以我反转了数组,在数组的最后一个条目上使用unset(),然后再次反转到原来的排序。

但是对于普通的重新声明变量,您不需要使用它。只需立即重新声明即可。

花药用例可以是自己编写的数组过滤器:

foreach ($array as $key => $value) {
    if ($value === false){
        unset($array[$key]);
    }
}

编辑:

从@Michael导入评论:

.. 如果您正在处理非关联数组并依赖于索引,请确保通过 array_values() 或类似的东西运行它。这将重置索引。 即使是一些本机 array_* 函数也不会总是重置它,如果您执行诸如 $myArray[count($myArray) - 1] 这样微不足道的事情,索引可能不再存在,这可能会导致很多挫败感。

这里没有区别。 unset删除变量;如果你想,你知道,删除一个变量,请使用它。紧接着重新声明相同的变量与简单地覆盖其内容相同。

在这种情况下,您不需要unset,因为您将再次使用它来存储一些其他值。

但是,如果您不想在同一代码中再次使用此变量,则应unset变量。

我个人对会话变量使用 unset。因为如果没有使用会话变量而不是为什么要存储在会话中,因为会话变量占用服务器中的空间,可能会导致服务器关闭问题。

在您的情况下,无需使用 unset。但是考虑一种情况,即您不希望数组中的任何键可能导致应用程序中断其流。例如:查询生成器,它接受要插入到数据库中的数据数组,并且当该数组由key => value对组成时,其中键与表中的列名相同。