清除PHP数组值的最佳方法

时间:2012-04-21 18:48:53

标签: php arrays

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

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

或者这个

foreach($blah_blah as $blah) {
    $foo = array();
    //do something
    $foo = null;
}

14 个答案:

答案 0 :(得分:217)

就像Zack在下面的评论中所说,你可以简单地使用

重新实例化它
$foo = array(); // $foo is still here

如果你想要更强大的东西使用unset,因为它也会从符号表中清除$ foo,如果稍后你需要数组再次实例化它。

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

答案 1 :(得分:76)

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

$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

答案 2 :(得分:31)

可悲的是,我无法回答其他问题,没有足够的声誉,但我需要指出一些对我来说非常重要的事情,我认为这对其他人也有帮助。

取消设置变量是个不错的方法,除非您需要原始数组的引用!

明确我的意思: 如果你有一个函数,它使用数组的引用,例如像

这样的排序函数
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,即使它不那么干净且易于理解。

答案 3 :(得分:12)

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

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

尽管可能,但使用

$array = array();

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

答案 4 :(得分:9)

unset()不够好吗?

unset($array);

答案 5 :(得分:6)

$array_name = array();怎么样?

答案 6 :(得分:4)

使用array_splice清空数组并保留引用:

array_splice($myArray, 0);

答案 7 :(得分:1)

我使用了unset()来清除数组但我已经意识到unset()会将数组渲染为null,因此需要重新声明数组,例如

<?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
?>

答案 8 :(得分:1)

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

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;

}

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

答案 9 :(得分:0)

当垃圾收集器在没有午休的情况下进行巡视时,unset功能非常有用;

然而,未设置的函数只是破坏了对数据的变量引用,数据仍然存在于内存中,并且PHP将内存视为正在使用,尽管不再有指针。

<强>解决方案:null分配给变量以清除数据,至少在垃圾收集器获取数据之前。

$var = null;

然后以类似的方式取消它!

unset($var);

答案 10 :(得分:0)

也许是简单,经济的方式(无需使用任何标志)...

$array = [];

我们可以阅读php手册:

  

从PHP 5.4开始,您还可以使用短数组语法,该语法用[]替换array()。

答案 11 :(得分:0)

帖子未真正回答问题。保持键并清除值是问题的重点。

<pre>

就像在二维数组中保存CSV值并清空特定行的情况一样。遍历似乎是唯一的方法。

答案 12 :(得分:0)

对于 PHP >= 5.4 使用

$var = []; 

不确定它是否比

$var = array();

但至少看起来更干净。

答案 13 :(得分:-1)

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