繁体   English   中英

PHP添加到购物车问题

[英]Php add to shopping cart problem

我试图创建一个将商品添加到购物车的php函数。 我想要它做的是检查数组,以查看该项目是否已经在其中,是否增加了数量,如果没有在购物车中创建该项目。

相反,它正在做的是添加一个项目,它将在第一次运行(如果已经存在的项目只会增加数量),但是如果添加另一个项目,它将继续在购物中创建该项目的新实例购物车

项目1-数量4项目2-数量1项目2-数量1项目2-数量1 ...依此类推...

下面是我到目前为止的代码?

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            $i=0;
            while($added == false)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    //$i++;
                    //break;
                }
                if($added == true)
                {
                    break;
                }
                else //if($added == false)
                {
                    $this->items[$this->countItems] = new OrderItem($id, $qty);
                    //$this->total = $total+ ($qty *$price);
                    $this->countItems++;
                    $added = true;
                    //break;
                }
                //else break;
                $i++;
            }

        }
        else
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

问题在于您不是先搜索整个数组以查看其中是否存在该项。 下面的代码应该可以工作,但是我可能输入了错字或其他错误,因此请确保仔细检查。

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            for($i=0; $i < $count; $i++)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    break;
                }
            }

        }
        if(!$added)
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

更好的选择是使用字典

即。

$arr = array();
$arr['item_id'] = new OrderItem(...);

然后,您可以使用以下命令检查项目是否在数组中:

if(isset($arr[$id])){
    ...
}

逻辑有缺陷。 仅当碰巧是购物车中的第一件物品时,该代码才会增加该物品的数量。 否则,它将添加该项目。 在这里证明:

if($added == true) // if this cart item's quantity was incremented
{
    break;
}
else // add item
{
    $this->items[$this->countItems] = new OrderItem($id, $qty);
    // etc...
}

相反,你应该删除new OrderItem($id, $qty)从循环和检查的价值$added通过所有的车项目后循环。 对于这个工作,你需要通过循环for使用(而不是同时) $count

暂无
暂无

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

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