购物车中的多条线路用于具有不同选项的相同产品

时间:2014-02-16 18:06:26

标签: php session

我有一个购物车系统,每个可用项目都有多个选项。当客户将商品添加到购物车时,它会将所选选项保存到该特定ID,并将其显示在购物车中。

我这样做的代码如下:

$optionsSelected = array();
 if(!empty($_POST['productOption'])){
    foreach($_POST['productOption'] as $options){
        $optionsSelected[] = $options;
    }
 }

case "add": 

$ optionsSelected数组var_dumps()as:

array(3) { [0]=> string(21) "Swedish Fish Assorted" [1]=> string(31) "Beary Blue Rasberry Gummi Bears" [2]=> string(25) "Nonpareils Milk Chocolate" }

    $_SESSION['cart'][$productID]++;
    $_SESSION['options'.$productID] = $optionsSelected;

    header('location: /shop/cart');

break;

要显示我购物车中的选项:

<?php if($_SESSION['options'.$id] > 0): ?>
   <?php foreach($_SESSION['options'.$id] as $option): ?>
      <p><?php echo $option; ?></p>
   <?php endforeach; ?>
<?php endif; ?>

现在唯一的问题是:

客户将Product ID 4521选项A,C,and D添加到购物车,它显示效果很好,工作得很好。

现在,客户将带有选项Product ID 4521的{​​{1}}添加到购物车,它会在购物车中显示数量为2的相同产品,现在选项会显示D, B, and A并且第一组选项消失了。

我需要它实际上将它们分成不同的行,每个行的数量为D, B, and A

1

我真的不确定如何告诉它打破这些并将它们作为Product Description Options Quantity Product ID 4521 A, C, D 1 Product ID 4521 D, B, A 1 放在购物车中,因为它们具有相同的产品ID。

2 个答案:

答案 0 :(得分:0)

如果您稍微更改一下代码,则可以使用以下内容:

$array = array();

$array['options4521'][] = array('A','C','D');
$array['options4521'][] = array('B','B','A');

echo print_r($array);

输出是:

[options4521] => Array
    (
        [0] => Array
            (
                [0] => A
                [1] => C
                [2] => D
            )

        [1] => Array
            (
                [0] => B
                [1] => B
                [2] => A
            )

    )

答案 1 :(得分:0)

在阵列中添加产品时,用新的产品擦除旧产品。

您可以使用替代方案,例如每个产品的子阵列

$optionsSelected = array();
if (!empty($_POST['productOption']))
{
   foreach ($_POST['productOption'] as $options)
      $optionsSelected[] = $options;
}

case "add": 
    $_SESSION['cart'][$productID]++;
    $_SESSION['options'.$productID][] = $optionsSelected; // line changed here

    header('location: /shop/cart');
break;

然后,您可以这样显示结果

<?php if (count($_SESSION['options'.$id]) > 0): ?>
   <?php foreach($_SESSION['options'.$id] as $key => $options): ?>
      <?php echo '<p>Product ID '.$id.': '.implode(", ", $options).' (Quantity: '.$_SESSION['cart'][$id].')</p>'; ?>
   <?php endforeach; ?>
<?php endif; ?>

注意:显示部分可能(应该)看起来像这样

<?php
if (count($_SESSION['options'.$id]) > 0)
{
   foreach ($_SESSION['options'.$id] as $key => $options)
   {
      echo '<p>Product ID '.$id.': '.implode(", ", $options).' (Quantity: '.$_SESSION['cart'][$id].')</p>';
   }
}
?>