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循环中取消设置数组元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章