PHP数组问题



我正在为朋友构建一个简单的购物车,并在会话中使用数组来存储它。

要将商品添加到购物车中,我有以下代码

$next_item = sizeof($_SESSION['cart']) +1;
$_SESSION['cart'][$next_item] = array(item => $product_id, option => $option, qty => 1);

我正在努力如何在这个数组中更新一个项目的数量,如果有人添加另一个相同的项目或更新购物车。有人能给我指个方向吗?由于

类似

foreach($_SESSION['cart'] as $key => $value) {
    if ($_SESSION['cart'][$key]['item'] == $product_id) {
        $_SESSION['cart'][$key]['qty'] += $qty_to_add;
    }
}

我将改变你的数组结构。

不是

$_SESSION['cart'] = array(
    1 => array(
        'item' => 1,
        'option' => 1,
        'qty' => 1),
    2 => array(
        'item' => 2,
        'option' => 1,
        'qty' => 1),
    3 => array(
        'item' => 3,
        'option' => 1,
        'qty' => 1)
);
使用

$_SESSION['cart'] = array(
    1 => array(
        'option' => 1,
        'qty' => 1),
    2 => array(
        'option' => 1,
        'qty' => 1),
    3 => array(
        'option' => 1,
        'qty' => 1)
);

其中键为产品id。这将使引用项目更容易,您可以在一行中更新数量

$_SESSION['cart'][$product_id]['qty'] += $qty_to_add;

如果顺序不重要,您可以将产品存储在关联数组中。

if (isset($_SESSION['cart'][$product_id])) {
    // set qty of $_SESSION['cart'][$product_id] + 1
} else {
    // create $_SESSION['cart'][$product_id] with qty of 1
}

首先,您不需要计算数组大小:

$_SESSION['cart'][] = array(...);

第二,我将使用$product_id作为数组键。这样,搜索就很简单了:

if( isset($_SESSION['cart'][$product_id]) ){
    $_SESSION['cart'][$product_id]['qty']++;
}else{
    $_SESSION['cart'][$product_id] = array(
        'option' => $option,
        'qty' => 1,
    );
}

我不能说你为它选择了一个好的结构。在$product_id上建立索引怎么样?这样,您就可以知道购物车中是否已经有特定的商品了:

<?php
     if( isset($_SESSION['cart'][$product_id]) ) {
        $_SESSION['cart'][$product_id]['qty'] += $new_qty;
     } else {
        $_SESSION['cart'][$product_id] = array(item => $product_id, option => $option, qty => 1);
     }
 ?>

要向购物车添加东西,只需使用以下命令(假设产品id是唯一的):

$_SESSION['cart'][$product_id] = array('item' => $product_id, 'option' => $option, 'qty' => 1);

要设置任何给定产品id的数量为5,使用以下命令:

$_SESSION['cart'][$product_id]['qty'] = 5;

要将产品的数量增加3,使用以下命令:

$_SESSION['cart'][$product_id]['qty'] += 3;

相关内容

  • 没有找到相关文章

最新更新