为什么我不能在foreach
循环中取消设置变量?为什么我不能在`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);
在the code,该变量是在foreach
环内的范围,但在循环外它是未设置。是否有可能在循环中取消设置?
为什么我不能在foreach
循环中取消设置变量?为什么我不能在`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);
在the code,该变量是在foreach
环内的范围,但在循环外它是未设置。是否有可能在循环中取消设置?
的foreach
执行的阵列,而不是一个引用的副本,使之更容易处理阵列中时更剧烈的变化(比如你的)执行。
foreach
遍历数组并在访问循环内的代码块之前将键分配给$ i,并将值赋给$ a。在迭代之前,数组实际上被函数“复制”,所以对原始数组的任何更改都不会影响循环的进度。
您也可以通过引用将$ array传入到使用$i => &$a
的foreach中,而不是通过将允许数组变化的值传递给foreach。
另一种选择是直接在阵列上工作,你会看到不同的东西:
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);
当然,这是假设你的数组是数字和顺序键。
在几乎每一个编程语言,这是一个坏主意,修改数据收集,同时遍历它。 –
我记得你需要通过ref来设置数组:foreach(&$ array as $ i => $ a){' –
[在foreach循环中取消设置数组元素]的可能的重复(http:// stackoverflow的.com /问题/ 3054886 /复位-AN-阵列元件内-A-的foreach环)[foreach循环内取消设置数组元素(的 –