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

时间:2015-08-31 13:17:47

标签: php arrays session

我有一个只有身份证号码的SESSION ['cart']。我有一个表单通过删除按钮传递ID。一旦传递给我的控制器,我无法弄清楚如何编写使用ID($ _POST ['id'])的代码来从SESSION ['cart']中删除该项目。

我可以遍历并显示数组内容,但我无法弄清楚如何根据从表单传递的ID进行删除。

如何遍历SESSION ['cart']数组以查找与我的删除表单中传递的ID匹配,然后删除该ID?我知道unset($ _ SESSION ['cart'] [X]删除索引X处的ID,但我无法弄清楚如何遍历所有元素以找到匹配。

我在本论坛中已阅读了许多相关问题,但无法应用任何这些解决方案来解决此挑战。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

您拥有自己的价值观($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 ......那将是一个值得注意的时刻。

答案 1 :(得分:0)

以下是正确执行此操作的代码:

$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,
)