我正在尝试创建一个将商品添加到购物车的PHP功能。我想要它做的是检查数组是否已经在那里,如果它是增加数量,如果没有在购物车中创建项目。
它正在做的是它添加一个项目,它将在第一次工作(如果项目已经存在它只是增加数量)但是如果你添加另一个项目它继续创建该项目的新实例在购物车中 e.g
第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++;
}
}
答案 0 :(得分:0)
问题在于您不是先搜索整个数组以查看该项是否存在。下面的代码应该可以使用,但我可能会输入错字或其他内容,所以请务必仔细检查它。
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])){
...
}
答案 1 :(得分:0)
逻辑是有缺陷的。只有恰好是购物车中的第一个商品,代码才会增加商品的数量。否则,它将添加该项目。证据在这里:
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
(而不是一段时间)循环播放。
答案 2 :(得分:0)
类产品扩展了CI_Controller {
function __construct(){
parent::__construct();
// Load cart library
$this->load->library('cart');
// Load product model
$this->load->model('product');
}
function index(){
$data = array();
// Fetch products from the database
$data['products'] = $this->product->getRows();
// Load the product list view
$this->load->view('products/index', $data);
}
function addToCart($proID){
// Fetch specific product by ID
$product = $this->product->getRows($proID);
// Add product to the cart
$data = array(
'id' => $product['id'],
'qty' => 1,
'price' => $product['price'],
'name' => $product['name'],
'image' => $product['image']
);
$this->cart->insert($data);
// Redirect to the cart page
redirect('cart/');
}
}