Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 购物车中的多行,用于不同选项的同一产品_Php_Session - Fatal编程技术网

Php 购物车中的多行,用于不同选项的同一产品

Php 购物车中的多行,用于不同选项的同一产品,php,session,Php,Session,我有一个购物车系统,每个项目都有多个选项。当客户将项目添加到购物车时,它会将所选选项保存到该特定ID,并将其显示在购物车中 我这样做的代码如下: $optionsSelected = array(); if(!empty($_POST['productOption'])){ foreach($_POST['productOption'] as $options){ $optionsSelected[] = $options; } } case "add":

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

我这样做的代码如下:

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

case "add": 
$optionSelected数组var_dumps()为:

要在购物车中显示选项,我有:

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

我真的不知道如何告诉it部门将它们分解并作为
单个项目放置在购物车中,因为它们具有相同的产品ID。

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

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

    )

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

您可以使用另一种方法,例如为每个产品使用子数组

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


我得到了以下信息:
警告:内爆()[函数.内爆]:传入的参数无效
好吧,这让它显示了两组选项。但我真的希望它能显示在不同的行上。每个都有一个单独的数量和选项列表。我想已经足够接近了。这就是我所拥有的:
http://i1309.photobucket.com/albums/s627/mievan123/Capture_zpsab2fe131.png
我真正想要的是,每个项目都有完全不同的行,有不同的选项。这取决于您。我回答了你的主要问题,现在你可以找到你想要的替代品了
<?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>';
   }
}
?>