您好我正在尝试使用foreach循环删除数组元素,但它什么也没做。我需要索引完全消失而不是使其为null。这是我尝试过的:
foreach ($_SESSION['cart'] as &$arrays3) {
if($arrays3['id'] == $id){
unset($arrays3);
}
}
注意,每个键的数组值包含一个关联数组。
答案 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的答案所示。