为什么我不能在foreach
循环中取消设置变量?
<?php
$array = array(a,s,d,f,g,h,j,k,l);
foreach($array as $i => $a){
unset($array[1]);
echo $a . "\n";
}
print_r($array);
在代码中,变量在循环内的范围内foreach
,但在循环外它是未设置的。是否可以在循环内取消设置?
在数组的foreach
副本上执行,而不是引用,以便在执行期间更容易处理数组(例如您的)中更剧烈的变化。
foreach
在访问循环内的代码块之前,遍历数组并将键分配给 $i 并将值分配给 $a。该数组实际上是在迭代之前由函数“复制”的,因此对原始数组的任何更改都不会影响循环的进行。
您还可以通过引用将 $array 传递到 foreach 中,$i => &$a
而不是按值传递,这将允许数组的突变。
另一种选择是直接在数组上工作,你会看到一些不同的东西:
for($x=0;$x<count($array);$x++){
unset($array[1]);
// for $x=1 this would result in an error as key does not exist now
echo $array[$x];
}
print_r($array);
当然,这假设您的数组是按数字顺序键控的。