我正在创建一个电子商务网站,我正在尝试为购物车创建一个多维数组。其中的项目应采用以下格式:
1 => array(
'item_id' => string
'quantity' => string
'attribute' => string
)
(其中属性是颜色等产品选项)
如果我在购物车中添加了一个新商品,该商品具有相同的商品ID和相同的属性,我只想更新该商品的数量。
问题似乎在于我的if语句if (($key == "item_id" && $value == $id_to_add) && ($key == "attribute" && $value == $attribute_to_add))
在我添加第二个条件之前,它工作正常(在不检查属性($key == "item_id" && $value == $id_to_add)
的情况下为产品ID添加数量)
现在,不是更新项目的数量,而是再次添加相同的项目作为数组中的新项目。
对此的任何帮助将不胜感激。
这是表单HTML
<form id="add_to_cart" name="add_to_cart" method="post" action="product.php?id=<?php echo $product_id; ?>">
<input type="hidden" name="product_id" id="product_id" value="<?php echo $product_id; ?>">
<select name="attribute" id="attribute"><?php echo $attribute_list; ?></select>
<input type="number" name="quantity" id="quantity" value="1">
<input type="submit" name="add_button" id="add_button" value="Add to Shopping Cart">
</form>
以下是解析表单的PHP:
if (isset($_POST['product_id'])) {
$id_to_add = $_POST['product_id'];
$attribute_to_add = $_POST['attribute'];
$quantity_to_add = $_POST['quantity'];
echo $id_to_add.'-'.$attribute_to_add;
$wasFound = false;
$i = 0;
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"])<1) {
$_SESSION["cart_array"] = array(1 => array("item_id" => $id_to_add, "quantity" => $quantity_to_add, "attribute" => $attribute_to_add));
} else {;
foreach ($_SESSION["cart_array"] as $each_item) {
$i++;
while (list($key, $value) = each($each_item)) {
if (($key == "item_id" && $value == $id_to_add) && ($key == "attribute" && $value == $attribute_to_add)){
array_splice($_SESSION["cart_array"], $i-1, 1, array(array("item_id" => $id_to_add, "quantity" => $each_item['quantity']+$quantity_to_add, "attribute" => $attribute_to_add)));
$wasFound = true;
}
}
}
if ($wasFound == false) {
array_push($_SESSION["cart_array"], array("item_id" => $product_id, "quantity" => $quantity_to_add, "attribute" => $attribute_to_add));
}
}
var_dump ($_SESSION["cart_array"]);
}
答案 0 :(得分:1)
在您的情况下,您试图同时说item_id
和attribute
- 这是行不通的。你需要考虑上面的水平并从那里开始工作......
foreach ($_SESSION["cart_array"] as $key=>$each_item) {
if ($each_item["item_id"] == $id_to_add &&
$each_item["attribute"] == $attribute_to_add){
$_SESSION["cart_array"][$key]["quantity"] += $quantity_to_add;
$wasFound = true;
}
}
因此,这会一次查看3个属性的每个元素。将数量添加到项目的现有数量。 每个项目都是......
array(
'item_id' => string
'quantity' => string
'attribute' => string
)
所以只要看看各个元素,而不是单独的项目。
P.S。我无法运行此代码,所以我无法检查它是否完整,如果您有任何问题,请告诉我。