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