简体   繁体   English

多维数组

[英]Multidimensional Arrays

I have a function that adds custom built cameos in a cart. 我有一个功能,可以在购物车中添加自定义的客串。 The cart is stored in a session variable. 购物车存储在会话变量中。 If the customer decides to build the very same cameo I don't want to add another entry to the array I just want to be able to add 1 more to the quantity of said product. 如果客户决定构建相同的客串,我不想在阵列中添加另一个条目,我只是希望能够在所述产品的数量上再增加1个。 The problem is when the scripts reaches the point where it's checking to see if the values exist in the array it returns false and adds a new entry to the array. 问题是,当脚本到达要检查数组中是否存在值的位置时,脚本将返回false并将新条目添加到数组中。 I am fairly new to php so I'm not sure if I am going about it the right way. 我对php很陌生,所以我不确定是否要以正确的方式进行操作。

function AddToCart($subpid,$subtype,$subprice,$subtotal,$subcarving,$subline1,$subline2){
    global $form;

    $exist = false;
    $i=0;

    if(!isset($_SESSION['cart'])){
        $_SESSION['cart'] = array(0 => array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => 1));
    }
    else{
        foreach($_SESSION['cart'] as $item){
            $i++;
            while(list($key,$value) = each($item)){
                /* If product exist add 1 to quantity */
                if($key == "Product ID" && $value == $subpid && $key == "Type" && $value == $subtype && $key == "Price" && $value == "$".$subprice && $key == "Subtotal" && $value == "$".$subtotal  && $key == "Carving" && $value == $subcarving && $key == "Line 1" && $value == $subline1 && $key == "Line 2" && $value == $subline2){
                    array_splice($_SESSION['cart'], $i-1, 1, array(array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => $item['Quantity'] + 1)));
                    $exist = true;
                }
            }
        }
        if($exist == false){
            array_push($_SESSION['cart'], array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => 1));
        }
    }
    return 0;
}

If I was to just use: $key == "Product ID" && $value == $subid it will return true and update the quantity but the problem with that is if the customer buys two cameo with the same id but different carving on it or engravings my cart will be off. 如果我只使用:$ key ==“产品ID” && $ value == $ subid,它将返回true并更新数量,但是问题在于如果客户购买了两个具有相同id但雕刻不同的客串它或雕刻品我的购物车将被关闭。

I think you're making this way more confusing than it has to be... 我认为您正在使这种方式变得比必须的更加混乱。

I would set up your cart array like this: 我将这样设置您的购物车数组:

$cart[0]["name"] = "whatever";
$cart[0]["ProductID"] = "1234";
$cart[0]["price"] = 0.00;
$cart[0]["quantity"] = 1;
$cart[0]["options"] = array(
     "subcarving" => "asdf",
     "subline1"   => "asdfsafd",
     "subline2"   => "asfdsadfdf");

Then you could just handle it with easy looping like so: 然后,您可以像这样简单地循环处理它:

$didadd = 0;
for($x = 0; $x < sizeof($cart); $x++) {
    if($subid == $cart[$x]["ProductID"]) {
        // check options
        $sameOpts = 1;
        foreach($cart[$x]["options"] as $key => $val) {

            if($val != ${$key}) { // checks if the current items option[val] = function(val)
                $sameOpts = 0;
            }

        }

        if($sameOpts) {
            $didadd = 1; // sets the flag that we added the element.
            // increase quantity since the product id and options matched.

        } else {
            $didadd = 1;
            // add new element
            // sets the flag that we added the element
        }

    }
} 

if(!$didadd) { 
    // still need to add the item
    // do code to create new $cart item here.

}

It doesn't work because you are comparing each key at the same time with the && statement but you're looping through each one of your keys one at a time. 这是行不通的,因为您同时将每个键与&&语句进行比较,但是一次循环遍历每个键。 Take out the while loop and just compare it like this: 取出while循环,然后像这样进行比较:

if( $item['Product ID'] == $subpid ... //etc ) {

}

Also you don't need array_splice just update the items. 另外,您不需要array_splice即可更新项目。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM