PHP - 在foreach循环中取消设置数组元素[重复]

Posted

技术标签:

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

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

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

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

【问题讨论】:

另一个:***.com/questions/1949259/… 【参考方案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 的回答所示。

【讨论】:

以上是关于PHP - 在foreach循环中取消设置数组元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php中特定索引处的JSON未设置元素

PHP无法取消设置对象内的数组元素

为啥我不能在“foreach”循环中取消设置变量?

PHP:使用 foreach 从多维数组中删除元素(按键)

在 PHP 中使用 foreach 循环时查找数组的最后一个元素

php foreach输出数组只输出元素的第一个字符