【问题标题】:PHP - Unsetting array element in a foreach loop [duplicate]PHP - 在foreach循环中取消设置数组元素[重复]
【发布时间】:2013-10-23 22:38:27
【问题描述】:

您好,我正在尝试使用 foreach 循环删除数组元素,但它什么也没做。我需要索引完全消失而不是使其为空。这是我尝试过的:

foreach ($_SESSION['cart']  as &$arrays3) {
    if($arrays3['id'] == $id){
        unset($arrays3);
    }
}

注意,每个键的数组值都包含一个关联数组。

【问题讨论】:

标签: php arrays foreach


【解决方案1】:

您需要使用 foreach 中的 key,并直接(从会话中)取消设置变量:

foreach ($_SESSION['cart']  as $key => $arrays3) {
    if($arrays3['id'] == $id){
        unset($_SESSION['cart'][$key]);
    }
}

取消设置 $arrays3 或其任何子级将仅在 foreach 循环的下一次迭代之前有效,届时将再次设置。

【讨论】:

  • 在同一个循环中我将修改一些元素,所以我不应该在arrays3之前使用'&'吗?
  • 直接引用他们更安全:$_SESSION['cart'][$key]['your_index'] = 'your_value';
  • 或者按照@Sven 在他下面的回答中建议的那样做......
  • 需要注意的是,您可以在通过引用迭代时编辑该值,但除非您按照上面的示例这样做,否则您不能删除它
【解决方案2】:

您正在使用一种危险形式的 foreach 循环。您必须始终在循环后取消设置引用变量:

foreach ($_SESSION['cart']  as &$arrays3) {}
unset($arrays3);

否则,如果再次使用该循环,事情就会中断。

而且确实不需要参考。 foreach 对数组的副本进行操作,因此对键或值的更改不会回到原始数组,但您始终可以访问原始数组,如@scrowler 的回答所示。

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 2011-02-20
    • 2011-01-01
    • 2019-04-13
    • 2017-05-05
    • 2019-05-11
    • 1970-01-01
    • 2014-05-04
    • 2013-04-11
    相关资源
    最近更新 更多