将数组添加到多维而不是合并

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

我有产品的多维数组,我想在用户更改数量而不是添加新数据时更新现有数据。我正在尝试合并但由于某种原因,多维数组中的名称已更改,我不明白为什么。

它看起来像:https://i.imgur.com/zEZVDXX.png

if(!empty($_POST["addquantity"])) {
            $add_id = $_GET['add'];
            $add_quantity = $_POST['addquantity'];
            $sqlOrd = "SELECT * FROM products WHERE id_product = '$add_id'";
            $result = mysqli_query($conn, $sqlOrd);
            while($row=mysqli_fetch_assoc($result)) {
                $productByCode[] = $row;
            }

            $itemArray = array(
                        $productByCode[0]["id_product"] => array(
                            'name' => $productByCode[0]["name"],
                            'id_product' => $productByCode[0]["id_product"],
                            'quantity' => $_POST["addquantity"],
                            'price' => $productByCode[0]["price"]
                        )
                    );

            if(!empty($_SESSION["cart_item"])) {
                if(in_array($productByCode[0]["id_product"],$_SESSION["cart_item"])) {
                    foreach($_SESSION["cart_item"] as $k => $v) {
                            if($productByCode[0]["id_product"] == $k)
                                $_SESSION["cart_item"][$k]["quantity"] = $_POST["addquantity"];
                    }
                } else {
                    $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
                }
            } else {
                $_SESSION["cart_item"] = $itemArray;
            }
        }
php arrays multidimensional-array
2个回答
1
投票

你可以简化整个代码。不需要循环,并且您知道购物车项目的键/ ID,您可以直接访问它们。除此之外,您应该注意sql注入并使用预准备语句。

if (!empty($_POST["addquantity"])) {
    // cast some vars around to prevent sql injection - better use prepared statements
    $add_id = (int)$_GET['add'];
    $add_quantity = (float)$_POST['addquantity'];
    $sqlOrd = "SELECT * FROM products WHERE id_product = '$add_id' LIMIT 1";
    $result = mysqli_query($conn, $sqlOrd);
    $product = mysqli_fetch_assoc($result);
    if (!$product) {
        // some error handling..
    }

    $item = [
        'name' => $product["name"],
        'id_product' => $add_id,
        'quantity' => $add_quantity,
        'price' => $product["price"]
    ];

    if (!isset($_SESSION["cart_item"])) {
        $_SESSION["cart_item"] = [];
    }

    if (isset($_SESSION["cart_item"][$add_id])) {
        $_SESSION["cart_item"][$add_id]["quantity"] += $add_quantity;
    } else {
        $_SESSION["cart_item"][$add_id] = $item;
    }
}

0
投票

似乎问题是在in_array,但你想使用array_key_exists

这个IF语句直接转到ELSE if(in_array($productByCode[0]["id_product"],$_SESSION["cart_item"])),因为$_SESSION["cart_item"]中没有这样的值,然后array_merge重置此代码$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);中的键,因为有两个项具有相同的整数键。

所以,我的快速修复建议:

if(array_key_exists($productByCode[0]["id_product"],$_SESSION["cart_item"])) { 
... rest of the code ...
© www.soinside.com 2019 - 2024. All rights reserved.