我的这段代码使用$i
的值从数组中删除项目。 $i=0;
启动时$i=2
,删除$i
时,无法再次删除替换它的值。我知道这是因为我使用未设置功能在我的阵列中有一个洞。
在我的表单中,我将值设置为<input name='index_to_remove' type='hidden' value='" . $i . "' />
。
if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "") {
$key_to_remove = $_POST['index_to_remove'];
if (count($_SESSION["cart_array"]) <= 1) {
unset($_SESSION["cart_array"]);
header("location: cart.php");
} else {
unset($_SESSION["cart_array"]["$key_to_remove"]);
//sort($_SESSION["cart_array"]);
//$_SESSION["cart_array"] = array_values($_SESSION["cart_array"]);
//array_splice($_SESSION['cart_array'], $i, 1, array($_SESSION['cart_array']['key_to_remove'] + 1));
}
}
然后使用此处理表单:
unset($_SESSION["cart_array"]["$key_to_remove"]);
注释出来的是我尝试过并且惨遭失败的事情。我已将其缩小到这一点:标记被删除然后完全消失,因此无法再次删除替换未设置数组项的新值。
我相信由于
,我的阵列中有一个洞{{1}}
我不知道要添加什么,但我认为我需要使用array_splice,因此当用户删除某个项目,然后再次尝试删除相同的项目时,它将始终删除。请帮忙。
答案 0 :(得分:2)
我们遇到了一个非常类似的问题!尝试使用array_values重置索引:
array_values(unset($_SESSION["cart_array"]["$key_to_remove"]));
答案 1 :(得分:0)
没有必要重新排序任何东西;只需在创建表单元素时使用索引:
foreach ($_SESSION['cart_array'] as $index => $value) {
// ...
printf(
'<input type="hidden" name="index_to_remove " value="%d" />',
$index
);
// ...
}
删除项目:
if (array_key_exists($key_to_remove, $_SESSION['cart_array'])) {
unset($_SESSION['cart_array'][$key_to_remove];
}
添加项目:
$_SESSION['cart_array'][] = ...;