清除数组中的所有值哪个更有效?第一个要求我每次在第二个例子的循环中使用该函数。
foreach ($array as $i => $value) {
unset($array[$i]);
}
或者这个
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
答案 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); //重新设置数组