Php 如果项目已在数组中,则在数量上添加更多1
我有一个数组正在会话中Php 如果项目已在数组中,则在数量上添加更多1,php,Php,我有一个数组正在会话中 array(2) { [0]=> array(5) { ["id"]=> string(1) "3" ["titulo"]=> string(25) "product 1" ["quantidade"]=> int(1) ["preco"]=> string(7) "1000.00" ["image"]=> string(15) "/img/no_img.png" } [1]=> array(5) { ["
array(2) {
[0]=> array(5) {
["id"]=> string(1) "3"
["titulo"]=> string(25) "product 1"
["quantidade"]=> int(1)
["preco"]=> string(7) "1000.00"
["image"]=> string(15) "/img/no_img.png"
}
[1]=> array(5) {
["id"]=> string(1) "1"
["titulo"]=> string(43) "product 2"
["quantidade"]=> int(1)
["preco"]=> string(6) "157.20"
["image"]=> string(14) "produtos/1.jpg"
}
}
例如,如果用户再次添加相同的产品(例如:ID3),我只想在其数量(quantidade)中添加+1
我尝试过这个,但是产品总是创建一个新的数组,而不是更新数量
你知道为什么吗
if(!empty($_SESSION["cart_item"])) {
if(in_array($produto, array_keys($_SESSION["cart_item"]))) {
foreach($_SESSION["cart_item"] as $k => $v) {
if($produto == $k) {
if(empty($_SESSION["cart_item"][$k]["quantidade"])) {
$_SESSION["cart_item"][$k]["quantidade"] = 1;
}
$_SESSION["cart_item"][$k]["quantidade"] += 1;
}
}
}
else {
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
}
}
else {
$_SESSION["cart_item"] = $itemArray;
}
$produto是我要更新的ID。变量
$k
包含当前数组索引[0,1,2,3],而不是当前数组ID的值
我会尝试将您的$producto
与$\u会话['cart\u item][$k]['id']
进行比较。我还更改了您的条件,以严格比较两个值(==
),这始终是一个好主意
还有一件事。
我不确定这条线是否合适
if(in_array($produto, array_keys($_SESSION["cart_item"]))) {
您正在尝试检查$produto
是否位于$\u会话[“购物车项目”]
的键中。但是,$\u SESSION[“cart\u item”]
的键是从0开始的索引。因此,id 1可能不在位置1
最好使用另一个变量(比如$dirty
)检查当前数组是否已更新
if(!empty($_SESSION["cart_item"])) {
$dirty = false;
foreach($_SESSION["cart_item"] as $k => $v) {
if($produto === $_SESSION["cart_item"][$k]['id']) {
$dirty = true
if(empty($_SESSION["cart_item"][$k]["quantidade"])) {
$_SESSION["cart_item"][$k]["quantidade"] = 1;
}
$_SESSION["cart_item"][$k]["quantidade"] += 1;
}
}
if(!$dirty) {
// the id was not present in the array
// we need to add it.
$_SESSION["cart_item"][] = [...];
}
}
else {
$_SESSION["cart_item"] = $itemArray;
}
请注意,此代码未经测试。变量
$k
包含当前数组索引[0,1,2,3],而不是当前数组id的值
我会尝试将您的$producto
与$\u会话['cart\u item][$k]['id']
进行比较。我还更改了您的条件,以严格比较两个值(==
),这始终是一个好主意
还有一件事。
我不确定这条线是否合适
if(in_array($produto, array_keys($_SESSION["cart_item"]))) {
您正在尝试检查$produto
是否位于$\u会话[“购物车项目”]
的键中。但是,$\u SESSION[“cart\u item”]
的键是从0开始的索引。因此,id 1可能不在位置1
最好使用另一个变量(比如$dirty
)检查当前数组是否已更新
if(!empty($_SESSION["cart_item"])) {
$dirty = false;
foreach($_SESSION["cart_item"] as $k => $v) {
if($produto === $_SESSION["cart_item"][$k]['id']) {
$dirty = true
if(empty($_SESSION["cart_item"][$k]["quantidade"])) {
$_SESSION["cart_item"][$k]["quantidade"] = 1;
}
$_SESSION["cart_item"][$k]["quantidade"] += 1;
}
}
if(!$dirty) {
// the id was not present in the array
// we need to add it.
$_SESSION["cart_item"][] = [...];
}
}
else {
$_SESSION["cart_item"] = $itemArray;
}
请注意,此代码未经测试。开始时
var\u dump()
中的数组是什么,是$\u会话['cart\u item']
?$produto
中有什么内容?如果这是您要添加到购物车中的商品的产品id,那么您肯定需要查看数据,而不是数组键?@RickJoe,与上一个问题相同的问题-错误的比较:)您必须使用If($\u会话[“购物车商品”][$k]['id']=$produto)
。如果您使用id
作为数组键,这会容易得多。正如@Nikolas在下面的回答中提到的,如果(在数组中($produto,array_key($\u SESSION[“cart_item”])
也是错误的。我会使用产品id(假设这是唯一的值)由于在这种情况下使用数组键可以更容易地查找特定产品的条目是否已经存在,isset($dataArray[$productId])
开始时var\u dump()中的数组是什么
?那么,$produto
中有什么内容?如果这是要添加到购物车中的商品的产品id,那么您肯定需要查看数据,而不是数组键?@RickJoe,与前面问题中的问题相同-比较错误:)您必须使用If($\u SESSION[“cart\u item”[$k]['id'=$produto)
。如果您使用id
作为数组键,这会容易得多。正如@Nikolas在下面的回答中提到的,如果(在数组中($produto,array_key($\u SESSION[“cart_item”])
也是错误的。我会使用产品id(假设这是唯一的值)在这种情况下,数组键可以更容易地查找特定产品的条目是否已经存在,isset($dataArray[$productId])
它可以在数量上添加+1,但是当我尝试添加另一个产品时,它没有添加任何想法?@RickJoe它在if(!$dirty)中
部分。只有在当前数组中找不到id为$produto
的产品时,$dirty
变量才为false。这是在添加新数组时。哦,所以我应该使用数组合并($\u会话[“cart\u item”],$itemArray);
那里?:)现在使用$\u会话[“cart\u item”]=array\u合并($\u SESSION[“cart_item”],$itemArray);
在脏的部分。非常感谢!很高兴我能帮上忙!在数量上添加+1是可行的,但是当我尝试添加另一个id为的产品时,它没有添加,有什么想法吗?@RickJoe它在if(!$dirty)中
部分。只有在当前数组中找不到id为$produto
的产品时,$dirty
变量才为false。这是在添加新数组时。哦,所以我应该使用数组合并($\u会话[“cart\u item”],$itemArray);
那里?:)现在使用$\u会话[“cart\u item”]=array\u合并($\u SESSION[“购物车”],$itemArray);
在脏的部分。非常感谢!很高兴我能帮上忙!