清除PHP数组值的最佳方法
清除数组中的所有值更有效 第一个要求我在第二个例子的循环中每次使用这个函数。
foreach ($array as $i => $value) { unset($array[$i]); }
或这个
foreach($blah_blah as $blah) { $foo = array(); //do something $foo = null; }
就像Zack在下面的评论中所说的,你可以简单地使用它来重新实例化它
$foo = array(); // $foo is still here
如果你想要更强大的function,可以使用unset,因为它也会从符号表中清除$ foo,如果你以后需要这个数组,可以再次实例化它。
unset($foo); // $foo is gone $foo = array(); // $foo is here again
如果您只想将一个variables重置为空数组,您可以简单地重新初始化它:
$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
可悲的是我不能回答其他问题,没有足够的声望,但我需要指出一些对我来说非常重要的事情,我认为这也会帮助其他人。
取消设置variables是一个不错的方法, 除非你需要原始数组的引用!
为了弄清楚我的意思:如果你有一个函数,使用数组的引用,例如类似的sortingfunction
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; } }
它不工作! 在这里要小心,不要删除引用,所以variables$array
被重新创build并正确填充,但是值不能从函数外部访问。
所以如果你有引用,你需要使用$array = array()
而不是unset
,即使它不那么干净和可以理解。
如果数组是联想的,我会说第一个。 如果不是,则使用for
循环:
for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }
尽pipe如果可能,使用
$array = array();
将数组重置为空数组是更可取的。
不是不好unset()
? unset()
不够好?
unset($array);
如何$array_name = array();
?
使用array_splice
来清空数组并保留引用:
array_splice($myArray, 0);
当垃圾收集器正在轮回而没有午休时,未设置的函数是有用的;
然而,未设置的函数只是破坏了对数据的variables引用,数据仍然存在于内存中,尽pipePHP没有指向它的指针,但PHP仍然在使用内存。
解决scheme:将null
分配给variables以清除数据,至less在垃圾回收器保留它之前。
$var = null;
然后以类似的方式取消设置!
unset($var);
我已经使用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();
//在这里做你想做的事
?>
这是强大的和未经testing($ gradearray); / /重新设置数组