PHP for not loop for all values
PHP for not loop for all values
我有这个代码片段:
var_dump(count($xml)); // returns 34
for($i = 8; $i < count($xml); $i++){
echo "unseting $i <br>";
unset($xml[$i]);
}
var_dump($xml);
结果:
整数 34
取消设置 8
取消设置 9
取消设置 10
取消设置 11
取消设置 12
取消设置 13
取消设置 14
取消设置 15
取消设置 16
取消设置 17
取消设置 18
取消设置 19
取消设置 20
为什么这个 for 在 $i = 20 处中断?
当我为 $i = 0 更改 for 循环时 - 它仍然工作异常。我只得到数字 0-16 - 总是只有一半。但是当我评论 unset line - 然后它遍历所有值..
unset哪里会出问题?为什么 unset 打破我的一半?
当您 unset
移动数组中的项目时,数组正在缩小,因为循环是 运行。以前位于索引 $i
的内容现在基本上位于索引 $i - 1
。
尝试 运行 向后循环,并使用 $i--
代替。
for($i = count($xml); $i > 7; $i--){
echo "unseting $i <br>";
unset($xml[$i]);
}
您还可以在循环运行之前设置长度,这样它在循环期间不会像这样改变:
$count = count($xml);
for ($i = 8; $i < $count; $++) {
...
}
您遇到这种情况是因为 unset() 破坏了指定的变量。
因此,当您遍历循环并同时使用 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
循环的结束条件。
如果您打算从某个索引开始删除数组元素,那么您可以只使用 array_splice
:
array_splice($xml, 8);
我有这个代码片段:
var_dump(count($xml)); // returns 34
for($i = 8; $i < count($xml); $i++){
echo "unseting $i <br>";
unset($xml[$i]);
}
var_dump($xml);
结果:
整数 34
取消设置 8 取消设置 9 取消设置 10 取消设置 11 取消设置 12 取消设置 13 取消设置 14 取消设置 15 取消设置 16 取消设置 17 取消设置 18 取消设置 19 取消设置 20
为什么这个 for 在 $i = 20 处中断?
当我为 $i = 0 更改 for 循环时 - 它仍然工作异常。我只得到数字 0-16 - 总是只有一半。但是当我评论 unset line - 然后它遍历所有值..
unset哪里会出问题?为什么 unset 打破我的一半?
当您 unset
移动数组中的项目时,数组正在缩小,因为循环是 运行。以前位于索引 $i
的内容现在基本上位于索引 $i - 1
。
尝试 运行 向后循环,并使用 $i--
代替。
for($i = count($xml); $i > 7; $i--){
echo "unseting $i <br>";
unset($xml[$i]);
}
您还可以在循环运行之前设置长度,这样它在循环期间不会像这样改变:
$count = count($xml);
for ($i = 8; $i < $count; $++) {
...
}
您遇到这种情况是因为 unset() 破坏了指定的变量。
因此,当您遍历循环并同时使用 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
循环的结束条件。
如果您打算从某个索引开始删除数组元素,那么您可以只使用 array_splice
:
array_splice($xml, 8);