Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
清除PHP数组的最佳方法';s值_Php_Arrays - Fatal编程技术网

清除PHP数组的最佳方法';s值

清除PHP数组的最佳方法';s值,php,arrays,Php,Arrays,在清除数组中的所有值时,哪个更有效?第一个示例要求我在第二个示例的循环中每次都使用该函数 foreach ($array as $i => $value) { unset($array[$i]); } 还是这个 foreach($blah_blah as $blah) { $foo = array(); //do something $foo = null; } 还不够好吗 unset($array); 如果数组是关联的,我会说第一个。如果不是,请使用

在清除数组中的所有值时,哪个更有效?第一个示例要求我在第二个示例的循环中每次都使用该函数

foreach ($array as $i => $value) {
    unset($array[$i]);
}
还是这个

foreach($blah_blah as $blah) {
    $foo = array();
    //do something
    $foo = null;
}
还不够好吗

unset($array);

如果数组是关联的,我会说第一个。如果不是,请使用
for
循环:

for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }

最好将数组重置为空数组。

如果只想将变量重置为空数组,只需重新初始化即可:

$foo = array();
请注意,这将保留对它的任何引用:

$foo = array(1,2,3);
$bar = &$foo;
// ...
$foo = array(); // clear array
var_dump($bar); // array(0) { } -- bar was cleared too!
如果要中断对它的任何引用,请先取消设置:

$foo = array(1,2,3);
$bar = &$foo;
// ...
unset($foo); // break references
$foo = array(); // re-initialize to empty array
var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged

正如Zack在下面的评论中所说,您可以使用

$foo = array(); // $foo is still here
如果您想要更强大的功能,请使用unset,因为它还将从符号表中清除$foo,如果您稍后需要该数组,请再次实例化它

unset($foo); // $foo is gone
$foo = array(); // $foo is here again

怎么样
$array_name=array()

很遗憾,我不能回答其他问题,没有足够的声誉,但我需要指出一些对我来说非常重要的事情,我认为这也会帮助其他人

取消设置变量是一种很好的方法,除非您需要原始数组的引用

为了明确我的意思: 如果您有一个使用数组引用的函数,例如排序函数,如

function special_sort_my_array(&$array)
{
    $temporary_list = create_assoziative_special_list_out_of_array($array);

    sort_my_list($temporary_list);

    unset($array);
    foreach($temporary_list as $k => $v)
    {
        $array[$k] = $v;
    }
}
它不起作用了!这里要小心,
unset
删除引用,因此再次创建变量
$array
,并正确填充,但不能从函数外部访问这些值

因此,如果您有引用,您需要使用
$array=array()
而不是
unset
,即使它不那么干净和易懂。

当垃圾收集器在没有午休的情况下进行循环时,该函数很有用

然而unset函数只是简单地破坏了对数据的变量引用,数据仍然存在于内存中,PHP认为内存正在使用,尽管不再有指向它的指针

解决方案:
null
赋值给变量以清除数据,至少在垃圾收集器获得数据之前是这样

$var = null;
然后以类似的方式取消设置它

unset($var);
用于清空数组并保留引用:


array\u拼接($myArray,0)

这是功能强大且经过测试的 未设置($gradearray)//重新设置数组

我使用unset()清除数组,但我意识到unset()将使数组为空,因此需要重新声明数组,例如

<?php 
    $arr = array();
    array_push($arr , "foo");
    unset($arr); // this will set the array to null hence you need the line below or redeclaring it.
    $arr  = array();

    // do what ever you want here
?>

我知道这个问题很老了,但对于这个问题,我编写了一个递归函数来取消设置数组中的所有值。递归,因为给定数组中的值也可能是数组。这对我来说很有用:

function empty_array(& $complete_array) {
    foreach($complete_array as $ckey => $cvalue)
    {
        if (!is_array($cvalue)) {
            $complete_array[$ckey] = "";
        } else {
            empty_array( $complete_array[$ckey]);
        }

    }
    return $complete_array;

}

因此,我得到了包含所有键和子数组的数组,但值为空。

可能是一种简单、经济的方法(使用的符号更少)

我们可以在php手册中阅读:

从PHP5.4开始,您还可以使用短数组语法,它将数组()替换为[]


这些帖子并没有真正回答这个问题。保留键和清除值是问题的焦点

foreach($resultMasterCleaned['header'] as $ekey => $eval) {
    $resultMasterCleaned[$key][$eval] = "";                 
}
与包含CSV值的二维数组的情况相同,并清空特定行。循环似乎是唯一的方法。

对于PHP>=5.4使用

$var = []; 
不确定它是否比

$var = array();

但至少看起来更干净。

取消设置($array)
有什么问题?删除变量。是的,但为什么要计算以这种方式设置的空数组?源?内存中没有一个变量看起来比var为null的变量小。为什么不把它重新实例化为
$foo=array()?@NishamMahsin使用
全局$foo;未结算($foo)
未设置($GLOBALS['foo'])
@vivoconuxino我这样写是因为作者提出了“清除PHP数组值的最佳方法”的问题。它说的是“清除”,而不是“新实例”。使用
unset
将从符号表中清除
$foo
。我说的是非常大的表,我可能会推荐
$foo=null;未结算($foo)因为这样也可以更好地清除内存。但是,这种行为(GC)不是很稳定,可能会随着PHP版本的变化而改变。unset()有时非常糟糕,如果使用错误,可能会造成麻烦。它不能正确回答OPs问题。我不知道他为什么接受这个作为最佳答案,他对自己问题的评论说,unset的问题是它删除了变量。要了解这种解决方案会导致哪些问题,请查看我的答案:实际上可能有一个概念上的问题:重新实例化一个结构和清空它是不同的。当处理内存时,你知道这和分配缓慢不是一回事。因此,尽管很容易使用,但重新实例化可能不是这个问题的答案,特别是如果需要多次快速地进行重新实例化的话。它可能会工作,但这在很大程度上依赖于PHP内存管理,IMO。这应该是答案-OP说的是清除数组值,而不是反引用整个数组变量。这听起来不正确。我认为将其设置为
null
不会强制立即进行垃圾收集。你对此有参考吗?@mpen你同意赋值
NULL
将替换本例中存储在
$var
变量位置的值吗?@AnthonyRutledge不,我不同意。据我所知,PHP将简单地更新
$var
以指向某个全局
NULL
对象,并将
$var
的数据保持在垃圾收集之前。为什么口译员会被迫立即覆盖这些数据?@mpen这是一个好问题,但在那个世界上,至少一切都准备好了。的确如此。关键是,我怀疑在取消设置它之前将它设置为null将有助于任何人,我认为这是最好的答案。应该是ac
$var = []; 
$var = array();