2

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

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

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

4

2 回答 2

5

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

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

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

于 2013-10-15T23:34:24.347 回答
2

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

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

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

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

于 2013-10-15T23:38:35.373 回答