PHP数组数据未更新
任务是让一个表显示一些带有“添加到购物车”链接的产品,该链接将用户发送到另一个页面,该页面使用链接中的信息获取数据以显示购买总额。该表正在添加已单击的新项目,但在多次单击项目时不更新实际数量 我已经尝试在检查中放置一个回音,用于检查已经在购物车中的商品,它确实在数量更新之前声明了数量1,在更新之后声明了数量2,但由于某些原因,这实际上并没有更新。价格也是如此PHP数组数据未更新,php,arrays,session,Php,Arrays,Session,任务是让一个表显示一些带有“添加到购物车”链接的产品,该链接将用户发送到另一个页面,该页面使用链接中的信息获取数据以显示购买总额。该表正在添加已单击的新项目,但在多次单击项目时不更新实际数量 我已经尝试在检查中放置一个回音,用于检查已经在购物车中的商品,它确实在数量更新之前声明了数量1,在更新之后声明了数量2,但由于某些原因,这实际上并没有更新。价格也是如此 <?php session_start(); if(empty($_SESSION['cart'])) { $_
<?php
session_start();
if(empty($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
$cart = $_SESSION['cart'];
$id = $_GET['productid'];
$name = $_GET['productname'];
$price = $_GET['productprice'];
$qty = 1;
$alreadyHas = 0;
foreach($cart as $cartKey => $cartItem) {
if(!empty($cartItem['pid'])) {
if($cartItem['pid'] == $id) {
$cartItem['qty'] = $cartItem['qty'] + 1;
$cartItem['total'] = $cartItem['price'] * $cartItem['qty'];
$alreadyHas = 1;
}
}
}
if($alreadyHas == 0) {
$cartItem = array(
'pid' => $id,
'name' => $name,
'price' => $price,
'qty' => $qty,
'total' => $price
);
array_push($cart, $cartItem);
}
$_SESSION['cart'] = $cart;
?>
您的问题在您的
foreach
循环中。您正在更新$cartitem
,但是,由于您没有在循环中通过引用传递它,$cart
变量本身没有被更新。尝试将foreach
循环更改为此(注意在“$cartItem”之前添加了&
):
请注意,您可以使用和简化代码:
您的问题在
foreach
循环中。您正在更新$cartitem
,但是,由于您没有在循环中通过引用传递它,$cart
变量本身没有被更新。尝试将foreach
循环更改为此(注意在“$cartItem”之前添加了&
):
请注意,您可以使用和简化代码:
另一种可选语法是,您可以为分配编写
$cart[$cartKey]['qty']=…
。这两种语法都同样有效。另一种可选语法可以为您的作业编写$cart[$cartKey]['qty']=…
。两者同等有效。
foreach($cart as $cartKey => &$cartItem) {
if (($k = array_search($id, array_column($cart, 'pid'))) !== false) {
$cart[$k]['qty'] = $cart[$k]['qty'] + 1;
$cart[$k]['total'] = $cart[$k]['price'] * $cart[$k]['qty'];
}
else {
$cartItem = array(
'pid' => $id,
'name' => $name,
'price' => $price,
'qty' => $qty,
'total' => $price
);
array_push($cart, $cartItem);
}