PHP for不是所有值的循环

PHP for不是所有值的循环,php,for-loop,unset,Php,For Loop,Unset,我有以下代码片段: var_dump(count($xml)); // returns 34 for($i = 8; $i < count($xml); $i++){ echo "unseting $i <br>"; unset($xml[$i]); } var_dump($xml); var_dump(count($xml));//返回34 对于($i=8;$i7;$i--){ 回显“未结算$i”; 未设置($xml[$i]); } 您还可以在循环

我有以下代码片段:

var_dump(count($xml)); // returns 34 

for($i = 8; $i < count($xml); $i++){ 
    echo "unseting $i <br>";
    unset($xml[$i]);
}

var_dump($xml);
var_dump(count($xml));//返回34
对于($i=8;$i”;
未设置($xml[$i]);
}
var_dump($xml);
结果: int 34

令人不安的8 令人不安的9 令人不安的10 令人不安的11 令人不安的12 令人不安的13 令人不安的14 令人不安的15 令人不安的16 令人不安的17 令人不安的18 令人不安的19 不稳定的20

为什么在i=20美元的情况下会出现这种情况

当我为$i=0更改循环时,它仍然正常工作。我只得到0-16个数字——总是只有一半。但当我注释unset行时,它会遍历所有值


未解决的问题在哪里?为什么不把我的钱减半呢

当您
取消设置
时,您正在移动数组中的项目,并且随着循环的运行,数组正在缩小。过去位于索引
$i
,现在基本上位于索引
$i-1

尝试反向运行循环,并改用
$i--

for($i = count($xml); $i > 7; $i--){ 
    echo "unseting $i <br>";
    unset($xml[$i]);
}
for($i=count($xml);$i>7;$i--){
回显“未结算$i
”; 未设置($xml[$i]); }
您还可以在循环运行之前设置长度,使其在循环期间不发生变化,如下所示:

$count = count($xml);
for ($i = 8; $i < $count; $++) {
    ...
}
$count=count($xml);
对于($i=8;$i<$count;$++){
...
}

您会遇到这种情况,因为它会破坏指定的变量。

因此,当您在循环中迭代,同时使用unset()从数组中删除元素时,数组大小也会随着从数组中删除元素而减小

所以执行是这样的,

unseting 8 with remaining array size: 34 
unseting 9 with remaining array size: 33 
unseting 10 with remaining array size: 32 
unseting 11 with remaining array size: 31 
unseting 12 with remaining array size: 30 
unseting 13 with remaining array size: 29 
unseting 14 with remaining array size: 28 
unseting 15 with remaining array size: 27 
unseting 16 with remaining array size: 26 
unseting 17 with remaining array size: 25 
unseting 18 with remaining array size: 24 
unseting 19 with remaining array size: 23 
unseting 20 with remaining array size: 22 

演示:

unset
从索引数组中删除元素,使
count()
结果减少,从而影响
for
循环的结束条件

如果您的意图是从某个索引中删除数组元素,则可以使用:


因为您减少了循环中
$xml
的长度哦,好吧,现在工作正常了!非常感谢!如果您对以下任何答案感到满意,您应该接受答案。对于有类似问题的未来访客来说,找到解决问题的答案通常很有用$max=计数($xml);对于($i=8;$i<$max;$i++){…}工作正常!非常感谢!:-)
array_splice($xml, 8);