用if条件拼接多维数组

问题描述 投票:0回答:1

我正在创建一个电子商务网站,并尝试为购物车创建一个多维数组。其中的项目应采用以下格式:

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

在我添加第二个条件之前,它工作正常(添加产品 ID 的数量而不检查属性

($key == "item_id" && $value == $id_to_add)

现在不再更新项目的数量,而是再次添加相同的项目作为数组中的新项目。

这是 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"]);
}
php multidimensional-array
1个回答
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
)

因此,只需将各种元素放在一起查看,而不是单独查看。

附注我无法运行此代码,因此我无法检查它是否完全正常工作,如果您有任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.