我想从此数组中取消设置所有值,但结果只删除了一半
Ex 1:
$filter = array("English", "Malay", "Student Pass", "NRIC");
for($i=0; $i<count($filter); $i++){
unset($filter[$i]);
}
print_r($filter);
=&GT;结果Array ( [2] => Student Pass [3] => NRIC )
Ex 2:
$filter = array("English", "Malay");
for($i=0; $i<count($filter); $i++){
unset($filter[$i]);
}
print_r($filter);
=&GT;结果Array ( [1] => Malay )
答案 0 :(得分:4)
您的问题是,每次for循环运行时,都会使用count($filter)
重新计算数组的长度。因此,for循环的运行频率低于数组中的元素。相反,你应该确定循环的数组长度超前,并且只在循环中使用这个变量:
e.g:
<?
$filter = array("English", "Malay", "Student Pass", "NRIC");
$arrayLength = count($filter); // contains the initial length of the array
for($i=0; $i<$arrayLength;$i++) {
unset($filter[$i]);
}
print_r($filter);
?>
但是,关于整体性能,覆盖数组甚至unset可能更好。
e.g:
// Overwrite it with an empty array
$filter = array();
// Unset it
unset($filter);
答案 1 :(得分:0)
因为当您取消设置数组上的项目时,它会将其删除。所以在下一次迭代中,计数($ filter)现在已经下降了。你可以像@Daan建议的那样做,只需设置$ filter = array()。但是,如果你坚持调用unset,你应该以相反的顺序遍历数组。
for($i = count($filter) - 1; $i >= 0; $i--) {
unset($filter[$i]);
}
答案 2 :(得分:0)
每次unset
元素count($filter)
减少。让我举个例子:
index
比递减的count
慢。这是错误的,你需要一个不同的方法,如:
while (count($filter) > 0) {
unset($filter[count($filter) - 1]);
}
这是次优的,只是取消设置数组,如下所示:
unset($filter);