PHP数组数据未更新

时间:2019-03-05 23:39:06

标签: php arrays session

分配工作是使表格显示一些带有“添加到购物车”链接的产品,该链接会将用户发送到另一个页面,该页面使用链接中的信息获取数据以显示购买总额。该表会添加被单击的新项目,但是当多次单击某个项目时,不会更新实际数量。

我已经尝试在购物车中已经存在的物品的支票上放置回显,并且确实在数量更新之前声明数量1,在更新之后声明数量2,但是由于某种原因,这实际上并没有更新。价格也一样。

<?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;
?>

1 个答案:

答案 0 :(得分:2)

您的问题出在您的foreach循环中。您正在更新$cartitem,但是因为您没有在循环中通过引用传递它,所以$cart变量本身并未被更新。尝试将foreach循环更改为此(注意,在$ cartItem之前添加&

foreach($cart as $cartKey => &$cartItem) {

请注意,您可以使用array_searcharray_column来简化代码:

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);
}