PHP使用unset从数组中删除$ i。我的阵列中有一个洞,无法修复它

时间:2014-01-29 01:06:31

标签: php arrays forms unset array-splice

我的这段代码使用$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,因此当用户删除某个项目,然后再次尝试删除相同的项目时,它将始终删除。请帮忙。

2 个答案:

答案 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'][] = ...;