以下是我的PHP代码:
while($row = $resp->fetch_assoc())
{
$itemArray = array(
array(
'name' => $row["product_name"],
'id' => $row["id"],
'image' => $row['images'],
'discount' => $row["discount"],
'quantity' => $min_quantity,
'price' => $row["price"]
)
);
}
if(!empty($_SESSION["cart_item"]))
{
if(in_array($itemArray, $_SESSION["cart_item"]))
{
foreach($_SESSION["cart_item"] as $item)
{
if(in_array($item, $itemArray))
$_SESSION["cart_item"][$item]["quantity"] = $min_quantity;
break;
}
}
else
{
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
}
}
else
{
$_SESSION["cart_item"] = $itemArray;
}
执行此代码后,我得到这样的回复:
Array
(
[0] => Array
(
[name] => Girls Designer Dress
[id] => 4
[image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg";
[discount] => 10
[quantity] => 1
[price] => 1200
)
)
我想要实现的目标是,如果用户在购物车中添加了相同的产品,而我们已经获得了相应的数据,而不是再创建一个数组并将i want to just update the quantity
来自1
的相同产品合并1}}到2
。
我被困在代码的这一部分
foreach($_SESSION["cart_item"] as $item)
{
if(in_array($item, $itemArray))
$_SESSION["cart_item"][$item]["quantity"] = $min_quantity;
break;
}
我已经多次尝试过,如果遇到相同的产品,那么对于同一产品,数量增加1,不再创建一个数组。
任何人都可以帮助解决这个逻辑和代码吗?
答案 0 :(得分:1)
$ _ SESSION [" cart-item"] 单个数组如何?
Array
(
[name] => Girls Designer Dress
[id] => 4
[image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg";
[discount] => 10
[quantity] => 1
[price] => 1200
)
如果是这样,那么请不要直接调用foreach,而只需使用array_search()直接检查该商品是否在$ itemArray中。
(数组中的函数搜索,如果找到了针,则返回其索引,否则返回false)。
$cartItemPosition = array_search($_SESSION['cart-item'], $itemArray);
if($cartItemPosition == false) {
// Not found in array, so create new entry
$itemArray.push($_SESSION['cart-item']);
}else {
// Found in array so edit existing entry
$itemArray[$cartItemPosition]['quantity'] = 999;
}
答案 1 :(得分:0)
如果$itemArray
只有一项:
更改为:
if(!empty($_SESSION["cart_item"]))
{
if(in_array($itemArray[0], $_SESSION["cart_item"]))
{
foreach($_SESSION["cart_item"] as $index => $item)
{
if(in_array($item, $itemArray))
$_SESSION["cart_item"][$index]["quantity"] = $_SESSION["cart_item"][$index]["quantity"] + 1;
break;
}
}
else
{
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
}
}
else
{
$_SESSION["cart_item"] = $itemArray;
}
in_array
的第一个if语句中添加了[0]。$index
并使用它。你的代码之前从未进入过if语句。如果$itemArray
总是在数组中包含一个数组(这就是我们使用[0]的原因)那么它就应该是这样的。
如果$itemArray
可能有超过1件商品,那么我们必须根据需要修改答案。
也不确定,但是如果你的fetching loop
可以返回多个项目,那么这是错误的,因为你只有最后的结果。如果你知道你只有1个结果,那么一切都很好。
while($row = $resp->fetch_assoc())
{
$itemArray = array(
array(
'name' => $row["product_name"],
'id' => $row["id"],
'image' => $row['images'],
'discount' => $row["discount"],
'quantity' => $min_quantity,
'price' => $row["price"]
)
);
}