【发布时间】:2015-12-17 12:12:45
【问题描述】:
此代码按预期工作,并在值为 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]。
我似乎找不到我做错了什么以及为什么我的代码没有按预期工作?
【问题讨论】:
-
如果你像这样使用
array_splice(),它将删除数组元素并重新索引数组。因此,如果您使用键 0 删除 5,那么您将使用循环转到 1,但数组会重新索引为:[0 => 10, 1 => 6]并且您跳过 10,因为您不会回到 0。所以只需使用unset()并用array_values()重新索引你的数组。此外,如果您只想过滤掉 10 和 5,请使用array_filter() -
好像是无限循环?
-
For 循环的表述不正确。使用
$i==10单个=正在分配一个值而不是测试一个值 -
对不起,我已经更新了我的代码。匆忙完成了示例代码。
-
你能解释一下你想要达到的目标吗?
标签: php arrays array-splice