清除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); / /重新设置数组