我有一个只有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,
)