如何从用作会话购物车的数组中删除项目ID


How to delete item ID from array used as session shopping cart

我有一个只有ID号的SESSION['cart']。我有一个表单传递带有删除按钮的ID。一旦传递给我的控制器,我不知道如何编写使用ID ($_POST[' ID '])从SESSION['cart']中删除项目的代码。

我可以循环并显示数组内容,但我不知道如何根据从表单传递的ID删除。

我如何循环通过SESSION['cart']数组找到与从我的删除表单传递的ID匹配,然后删除该ID?我知道unset($_SESSION['cart'][X]删除索引X处的ID,但我不知道如何循环遍历所有元素以找到匹配。

我在这个论坛上读过一些相关的问题,但一直无法应用任何这些解决方案来解决这个挑战。感谢任何帮助。

您的值($products = array(3,7,99,152))的方式不是一个很好的方法。每次你想执行一个操作,你必须循环遍历数组,你不希望。除此之外,你们是如何储存数量的?还是诸如大小或颜色之类的变化?

如果您的结构是$array[ ID_OF_PRODUCT ],您可以简单地这样做:

unset( $_SESSION['cart'][$_POST['id']] ); // Instant access via the key!

应该是使用的方法。这允许您创建这样的数组,具有高级信息,但易于访问(42/63是示例id)

$_SESSION['cart']['products'][42] = array(
    'quantity' = 11,
    'size'     = 'large',
    'color'    = 'blue'
);
$_SESSION['cart']['products'][63] = array(
    'quantity' = 9,
    'size'     = 'small',
    'color'    = 'red'
);

通过这种方式,您可以使用产品ID访问大量信息,现在还可以查看用户选择的尺寸和颜色(都只是示例)。您现在可能不需要这个,但您将在未来的道路上:)
正如您可能看到的,您可以很容易地使用条目做一些事情:

isset($_SESSION['cart'][$_POST['id']]); // check if the product exists
unset($_SESSION['cart'][$_POST['id']]); // remove the product
echo $_SESSION['cart'][$_POST['id']]['quantity']; // get the quantity.

代码中没有循环。你应该只在必要的时候使用循环,尽量避免循环,因为它们通常很慢。假设你的商店中有一个极端情况,有1000件商品,你需要删除no999……那得花点时间。

下面是正确的代码:

$id = $_POST['id'];
$items = $_SESSION["cart"];
if(($key = array_search($id, $items)) !== false) {
    unset($items[$key]);
}
$_SESSION["cart"] = array_values($items);

建议

除了商品ID,您还可以在SESSION数组中保存商品计数,因为用户可以多次将相同的商品添加到购物车中。在这种情况下,$_SESSION["card"]的结构应该是这样的:

array(
    '1'=>12,//Item with ID=1 is added 12 times in shopping cart
    '17'=>2,//Item with ID=17 is added 2 times in shopping cart etc.
    '32'=>12,
)