如何在使用2种不同颜色添加两次购物车项目时不会覆盖颜色选项数组

时间:2017-09-01 14:22:54

标签: php

如果我将一个项目添加到购物车并为其选择颜色,那么这样可以正常工作。但是,如果我再次添加相同的项目但选择不同的颜色,则会覆盖初始颜色。数量是正确的(2),但我想显示两种颜色。

    $product_id = $_POST['id'];
    $colour = $_POST['colour'];
    $wasFound = false;
    $i = 0;

        if(!isset($_SESSION['cart_array']) || count($_SESSION['cart_array']) < 1) {
            $_SESSION['cart_array'] = array(0 => array("item_id" => $product_id,  "quantity" => 1, "colour" => $colour));


        } else {

            foreach ($_SESSION['cart_array'] as $each_item) {
                $i++;
                while (list($key, $value) = each($each_item)) {
                    if($key == "item_id" && $value == $product_id) {
                        array_splice($_SESSION['cart_array'], $i-1, 1, array(array("item_id" => $product_id, "quantity" => $each_item['quantity'] + 1, "colour" => $colour)));
                        $wasFound = true;
                    }
                }
            }

            if($wasFound == false) {
                array_push($_SESSION['cart_array'], array("item_id" => $product_id, "quantity" => 1, "colour" => $colour));
            }
        }

2 个答案:

答案 0 :(得分:0)

您必须将Session cart中的颜色变量转换为数组以存储多种颜色变体

这样的事情:

 $product_id = $_POST['id'];
    $colour = $_POST['colour'];
    $wasFound = false;
    $i = 0;

        if(!isset($_SESSION['cart_array']) || count($_SESSION['cart_array']) < 1) {
            $_SESSION['cart_array'] = array(0 => array("item_id" => $product_id,  "quantity" => 1, "colour" => $colour));


        } else {

            foreach ($_SESSION['cart_array'] as $each_item) {
                $i++;
                while (list($key, $value) = each($each_item)) {
                    if($key == "item_id" && $value == $product_id) {
                        array_splice($_SESSION['cart_array'], $i-1, 1, array(array("item_id" => $product_id, "quantity" => $each_item['quantity'] + 1, "colour" => [$each_item['colour'],$colour])));
                        $wasFound = true;
                    }
                }
            }

            if($wasFound == false) {
                array_push($_SESSION['cart_array'], array("item_id" => $product_id, "quantity" => 1, "colour" => $colour));
            }
        }

答案 1 :(得分:0)

我建议您将阵列改为:

array([item_d] => array('item_id' => [item_d],
                        'count' => [Total_count],
                        'colors'=> array('red' => [red_count],
                                         'blue' => [blue_count]
                                        )
                      );
    );

if(!isset($_SESSION['cart_array'])) {
     $_SESSION['cart_array'] = array();
  }
if(!isset($_SESSION['cart_array'][$product_id])) {
  $_SESSION['cart_array'][$product_id] = array("item_id" => $product_id, 'count' => 0, 'colors' =>array());
}

if(!isset($_SESSION['cart_array'][$product_id]['colors'][$color])) {
 $_SESSION['cart_array'][$product_id]['colors'][$color] = 1;//1 of color
} else {
 $_SESSION['cart_array'][$product_id]['colors'][$color]++;
}
$_SESSION['cart_array'][$product_id]['count']++;//global count