【问题标题】:array_splice() isn't working properly inside a looparray_splice() 在循环内无法正常工作
【发布时间】: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 =&gt; 10, 1 =&gt; 6] 并且您跳过 10,因为您不会回到 0。所以只需使用 unset()并用array_values() 重新索引你的数组。此外,如果您只想过滤掉 10 和 5,请使用 array_filter()
  • 好像是无限循环?
  • For 循环的表述不正确。使用$i==10 单个= 正在分配一个值而不是测试一个值
  • 对不起,我已经更新了我的代码。匆忙完成了示例代码。
  • 你能解释一下你想要达到的目标吗?

标签: php arrays array-splice


【解决方案1】:

您似乎错过了在 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>
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2016-06-05
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多