PHP使用unset从数组中删除$i。我的数组中有一个洞,可以';我修不好

PHP使用unset从数组中删除$i。我的数组中有一个洞,可以';我修不好,php,arrays,forms,unset,array-splice,Php,Arrays,Forms,Unset,Array Splice,我的这段代码使用$i的值从数组中删除该项$i=0当它启动时,以及当删除$i=2时,无法再次删除替换它的值。我知道这是因为我使用unset函数在数组中有一个洞 在我的表单中,我将值设置为$I 然后使用以下命令处理表单: if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "") { $key_to_remove = $_POST['index_to_remove']; if (c

我的这段代码使用
$i
的值从数组中删除该项<代码>$i=0当它启动时,以及当删除
$i=2
时,无法再次删除替换它的值。我知道这是因为我使用unset函数在数组中有一个洞

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

我不知道要添加什么,但我认为我需要使用array_splice,这样当用户删除一个项目,然后再次尝试删除同一项目时,它将始终删除。请帮助。

我们遇到了一个非常类似的问题!尝试使用数组_值重置索引:


array_值(未设置($_会话[“购物车数组”][“$key_to_remove”])

无需重新排序任何内容;创建表单元素时只需使用索引:

foreach ($_SESSION['cart_array'] as $index => $value) {
    // ...
    printf(
        '<input type="hidden" name="index_to_remove " value="%d" />', 
        $index
    );
    // ...
}
要添加项目,请执行以下操作:

$_SESSION['cart_array'][] = ...;

删除
unset()
并改为使用
array\u拼接($\u SESSION['cart\u array'],$key\u to\u remove,1)
是否尝试删除
s?我不认为这是问题所在,但绝对不需要它们。@EugenRieck只是好奇,如果我从1开始数组,并指定$I=1怎么办?我必须把号码改成0吗????它与$i=0完美配合,非常感谢!我强烈建议不要在PHP中使用基于1的数组-基本上所有用于整数索引的函数都假定为零基数。我心里有一个洞,我无法修复它…(忍不住)我遇到了一个错误:解析错误:语法错误,意外的“unset”(t_unset),期望“这不起作用”
unset()
不返回值。这与
array_values()基本相同
if (array_key_exists($key_to_remove, $_SESSION['cart_array'])) {
    unset($_SESSION['cart_array'][$key_to_remove];
}
$_SESSION['cart_array'][] = ...;