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);