您好我正在尝试使用 foreach 循环删除数组元素,但它什么也不做。我需要索引完全消失而不是使其为空。这是我尝试过的:
foreach ($_SESSION['cart'] as &$arrays3) {
if($arrays3['id'] == $id){
unset($arrays3);
}
}
请注意,每个键的数组值都包含一个关联数组。
您需要使用key
foreach 中的 ,并直接取消设置变量(从会话中):
foreach ($_SESSION['cart'] as $key => $arrays3) {
if($arrays3['id'] == $id){
unset($_SESSION['cart'][$key]);
}
}
取消设置$arrays3
或其任何子级将仅在 foreach 循环的下一次迭代之前有效,届时将再次设置。
您正在使用一种危险形式的 foreach 循环。您必须始终在循环后取消设置引用变量:
foreach ($_SESSION['cart'] as &$arrays3) {}
unset($arrays3);
否则,如果再次使用该循环,事情就会中断。
而且确实不需要参考。foreach
对数组的副本进行操作,因此对键或值的更改不会回到原始数组,但您始终可以访问原始数组,如@scrowler 的答案所示。