用if条件拼接多维数组

时间:2018-02-21 12:23:23

标签: php multidimensional-array

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

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"]);
}

1 个答案:

答案 0 :(得分:1)

在您的情况下,您试图同时说item_idattribute - 这是行不通的。你需要考虑上面的水平并从那里开始工作......

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。我无法运行此代码,所以我无法检查它是否完整,如果您有任何问题,请告诉我。