PHP - 在foreach循环中取消设置数组元素

时间:2013-10-15 23:31:18

标签: php arrays foreach

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

取消设置$arrays3或其任何子项只有在foreach循环的下一次迭代时才有效,此时它将再次设置。

答案 1 :(得分:2)

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

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

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

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