【问题标题】:Multiple lines in shopping cart for same product with different options购物车中的多行相同产品具有不同选项
【发布时间】:2014-02-16 18:06:25
【问题描述】:

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

我的代码如下:

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

case "add": 

$optionsSelected 数组 var_dumps() 为:

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; ?>

现在唯一的问题是:

客户将带有选项A,C,and DProduct ID 4521 添加到购物车,它显示得很好并且工作得很好。

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

我需要它实际将它们分成不同的行,每个行的数量为 1

Product Description     Options    Quantity

Product ID 4521         A, C, D       1 

Product ID 4521         D, B, A       1 

我真的不知道如何告诉它分解这些并将它们作为individual items 放入购物车,因为它们具有相同的产品 ID。

【问题讨论】:

    标签: php session


    【解决方案1】:

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

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

    $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>';
       }
    }
    ?>
    

    【讨论】:

    • 我明白了:Warning: implode() [function.implode]: Invalid arguments passed in
    • 好吧,它可以显示两组选项。但我真的希望它显示在不同的行上。每个都有单独的数量和选项列表。
    • 我想已经足够接近了。
    • 这就是我所拥有的:http://i1309.photobucket.com/albums/s627/mievan123/Capture_zpsab2fe131.png 我真正想要的是为每个具有不同选项的项目提供完全独立的行。
    • 这取决于你。我回答了你的主要问题,现在你可以找到你想要的替代品
    【解决方案2】:

    如果您稍微更改一下代码,您将能够使用以下内容:

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

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多