【问题标题】:how to add to an array and not change it's first value?如何添加到数组而不更改它的第一个值?
【发布时间】:2018-06-23 13:42:43
【问题描述】:

嘿,所以基本上我正在尝试制作一个购物车,我希望将 id 产品放在一个数组中,以便我可以在 cookie 中将它们序列化 15 天,问题是我每次按下按钮时“添加到购物车”它更改了以前的 id 而不是添加到数组中,我尝试创建一个循环并每次更改索引,我尝试使用 $cart[]=$itemId;array_push(); 函数添加,似乎没有工作。

    if (isset($_POST['item'])) {
    $item = $_POST['item'];
    $panier = array();
    $panier[] = $item;
    print_r($panier);
    }

只是为了解释代码,此代码将在按下添加到购物车按钮时使用,并保留 post 变量中的产品 id,然后每次都添加到数组中,但我只在数组中得到一个值每次我按下按钮添加时都会不断变化。

【问题讨论】:

  • PHP 是无状态的。您需要通过会话或 cookie (反)序列化它来恢复购物车的状态。您已经建议使用后者,但显然尚未使用。这让我对你的问题到底是什么有点困惑?
  • 我只谈到了序列化来解释我接下来要做什么,但此时我真的只是想制作我的数组
  • 您可能希望在将该值添加到阵列/存储之前验证/过滤该值。

标签: php arrays add cart


【解决方案1】:

那是因为您每次都创建一个新数组,然后只向它添加一个值。删除$panier = array(),避免每次创建新数组。

将@IncredibleHat 的建议结合到工作示例中:

$item = 0;
while($item <= 5) {
    if (!isset($panier)) { $panier = array(); }
    $panier[] = $item;
    $item++;
}

print_r($panier);

请注意,如果您删除 if(!isset($panier),那么 $panier 只会包含最后一个值,因为它会被重新初始化以清空循环中的每次迭代。

【讨论】:

  • 或者将其包装在一个条件中:if (!isset($panier)) { $panier = array(); }
  • 这在这种情况下无济于事,因为每次单击按钮时都会新请求包含此页面的 PHP 页面代码。
  • 感谢您的回答,但即使删除了该部分,它仍然会做同样的事情,知道吗?
  • 那么你需要持久化$panier变量。见:stackoverflow.com/questions/1150944/variable-persistence-in-php
【解决方案2】:

除了不使用在请求之间持续存在的存储之外,您的方法还可以防止人们购买一件以上的商品:

 <?php
 session_start();
 if (isset($_POST['item'])) {
    $_SESSION['panier'][$_POST['item']]=
      isset($_SESSION['panier'][$_POST['item']) ?
      $_SESSION['panier'][$_POST['item']] + 1   :
      1;
 }

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多