0

我的这段代码使用 的值从数组中删除项目$i$i=0;当它开始时,当$i=2被删除时,替换它的值不能被再次删除。我知道这是因为我的数组中有一个使用unset函数的洞。

在我的表单中,我将值设置为$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"]);

我不知道要添加什么,但我认为我需要使用 array_splice 所以当用户删除一个项目,然后尝试再次删除同一个项目时,它总是会删除。请帮忙。

4

2 回答 2

2

我们遇到了一个非常相似的问题!尝试使用 array_values 重置您的索引:

array_values(unset($_SESSION["cart_array"]["$key_to_remove"]));

于 2014-01-29T01:26:07.677 回答
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'][] = ...;
于 2014-01-29T01:51:00.790 回答