array_splice()不能在循环内正常工作

时间:2015-12-17 12:12:46

标签: php arrays array-splice

此代码按预期工作,并在值为5或10时删除数组元素。但只有当我在数组中有1或5或10的值时,它才有效。

如果我有超过1的值为5或10,则只删除其中的1个并将其他元素留在数组中。

我的代码:

for($i = 0; $i <= 10; $i++) {
    if($somevar[$i] == 5 || $somevar[$i] == 10) {
        echo 'the sumvar'.$somevar[$i].' exists<br>';
        array_splice($somevar, $i, 1);
    }
}

例如,如果我有:[3, 5, 4],则结果符合预期:[3, 4]。但是,如果我有一个像[3, 5, 10, 4]这样的数组,它只会移除5,而不是10:[3, 10, 4]

我似乎无法找到我做错的事情以及为什么我的代码没有按预期工作?

1 个答案:

答案 0 :(得分:7)

您似乎错过了splice-operation之后重新编号的数组元素。

您必须调整循环变量:

for($i = 0; $i < sizeof($somevar); $i++) {
    if($somevar[$i] == 5 || $somevar[$i] == 10) {
        echo 'the sumvar'.$somevar[$i].' exists<br>';
        array_splice($somevar, $i, 1);
        $i--;
    }
}