在将其添加到购物车之前,我想检查该项目是否已存在。如果项目存在,我不想要两次显示循环中的一些项目。只需增加数组会话中现有项目的数量。
包含购物车中商品的会话数组:
Array
(
[0] => Array
(
[id] => 1
[qty] => 1
)
[1] => Array
(
[id] => 1
[qty] => 1
)
)
在Cart
页面上,循环项目形成购物车我有这个:
<?php
$db = require('database.php');
$cart_items = isset($_SESSION['cart']) ? $_SESSION['cart'] : null;
$products = array();
if($cart_items):
foreach ($cart_items as $key => $value)
{
$products[$key] = $value;
$id = (int) $value['id'];
$result = $db->query("SELECT * FROM products WHERE id=$id");
while($row = $result->fetch_object())
{
$products[$key]['id'] = $row->id;
$products[$key]['name'] = $row->name;
$products[$key]['price'] = number_format($row->price, 2);
// check if item exists
// this dont work i dont know how to check this
if($id == $row->id && $value['qty'] == 1)
{
$products[$key]['qty']++;
}
}
}
endif;
?>
在我推销推车产品的前端部分:
<tbody>
<?php if($products): ?>
<?php foreach ($products as $product): ?>
<tr>
<td><?= $product['id'];?></td>
<td><?= $product['name'];?></td>
<td><?= $product['price'];?> Eur</td>
<td><input type="text" name="qty" value="<?= $product['qty']; ?>" size="5"> </td>
<td><a href="<?= SITE_URL;?>?page=cart&action=delete&id=<?= $product['id'];?>" class="btn btn-default btn-sm"> <i class="glyphicon glyphicon-remove"></i> Remove</a> </td>
</tr>
<?php endforeach; ?>
<?php endif;?>
</tbody>
问题是,当我点击id
= 1的项目时,我会得到两个带有一些产品的新表行。我的想法是,当我在产品id = 1
上单击2次时,只需在购物车中的现有产品上增加数量。
对此有什么消息?
答案 0 :(得分:1)
首先,使用array_column()
函数从$products
数组中获取所有现有的产品ID。然后检查$products
数组中是否存在特定项目,并相应地更新产品和/或数量详细信息。
所以你的while()
循环应该是这样的:
while($row = $result->fetch_object()){
$ids = array_column($products, 'id');
if(in_array($row->id, $ids)){
$products[$key]['qty']++;
}else{
$products[$key]['id'] = $row->id;
$products[$key]['name'] = $row->name;
$products[$key]['price'] = number_format($row->price, 2);
$products[$key]['qty'] = 1;
}
}
另外,请从foreach
循环
$products[$key] = $value;
来自OP's comment,
现在的问题是在购物车中循环产品,当我在购物车中循环产品时我有重复的产品因为我添加了一个产品2次并更新数量。如何防止在购物车中双循环一个项目!如果我按下10次产品,id = 1.我不想要列表中的10个新循环项目我只想更新数量值。防止
中的某个项目循环<tr><td> ...</td></tr> ...
以下列方式更改if
块中的代码,
$unique_ids = array_unique(array_column($cart_items, 'id'));
foreach ($cart_items as $key => $value){
if(!in_array($value['id'], $unique_ids)) continue;
$id = (int) $value['id'];
$result = $db->query("SELECT * FROM products WHERE id=$id");
while($row = $result->fetch_object()){
$ids = array_column($products, 'id');
if(in_array($row->id, $ids)){
$products[$key]['qty']++;
}else{
$products[$key]['id'] = $row->id;
$products[$key]['name'] = $row->name;
$products[$key]['price'] = number_format($row->price, 2);
$products[$key]['qty'] = 1;
}
}
$key = array_search($value['id'],$unique_ids);
unset($unique_ids[$key]);
}