如何更新特定会话的会话变量

时间:2019-05-04 04:22:47

标签: php multidimensional-array

所以我有一个购物车系统,需要更新特定会话变量的数量。现在,如果我有一个ID为1的物品,

![enter image description here

并添加另一个ID为1的商品,它将数量更新为2

enter image description here

,很好。但是如果我添加id = 2的项目,

enter image description here

然后我再次添加另一个id = 1的项目,它将id = 2的数量更新为2,

enter image description here

何时应将id = 1的数量更新为3

enter image description here

这是我的代码:

$exists = false;
foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
    }
}
if ($exists == true) {
    $_SESSION["cart"][$key]['quantity']++;
}
else{
$_SESSION['cart'][] = array(
    'product_id' => $part_id,
    'title' => $title,
    'price' => $price,
    'default_img' => $default_img,
    'quantity' => $quantity);
}

1 个答案:

答案 0 :(得分:1)

在循环结束时,当您更新$_SESSION["cart"][$key]['quantity']时,$key将始终指向$_SESSION["cart"]中的最后一项,因此您将看到行为。您应该在循环中进行更新,例如

foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
        $_SESSION["cart"][$key]['quantity']++;
    }
}

或在找到匹配项时退出循环,以使$key指向正确的值:

foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
        break;
    }
}