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

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 に答える