array_splice() 在循环内无法正常工作

array_splice() isn't working properly inside a loop

此代码按预期工作,并在值为 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].

我似乎找不到我做错了什么以及为什么我的代码没有按预期工作?

您似乎没有注意到数组元素在 splice-operation 之后重新编号。

您必须调整循环变量:

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