【问题标题】:How to not repeat items in $SESSION list?如何不重复 $SESSION 列表中的项目?
【发布时间】:2013-07-29 09:20:02
【问题描述】:

我正在创建一个购物车。仅使用会话变量。我想要一些简单的东西,没有数据库,它只用于初始系统(以后可能使用数据库和登录)

我点击一个产品并使用 URL 添加 SESSION 变量

示例产品:橙色

发送网址

site.com/?page=buy&add=Orange&type=fruit

那么……

session_start();

//Create 'cart' if it doesn't already exist
if (!isset($_SESSION['SHOPPING_CART'])){ $_SESSION['SHOPPING_CART'] = array(); }

if (isset($_GET['add'])){
//Adding an Item
//Store it in a Array
$ITEM = array(
    //Item name     
    'name' => $_GET['add'],
    'type' => $_GET['tipo'],

//Item Price

);

对于打印,我使用:

  $itemType = ""; 
   foreach ($_SESSION['SHOPPING_CART'] as $itemNumber => $item) {
     if($itemType == $item['type']) {
       // skip...don't print again
     } else { 
        echo $item['type']; 
     }
     echo $item['name']; 
     $itemType = $item['type'];
    }

但我的问题是,当我打印时,我看到这样的内容:

Fruit:
  Orange
  Orange
  Apple 
Food
 Meat

有人可以告诉我如何只出现一次“水果”。我如何比较已经是重复的? 只有 1 个橙色。

Fruit:
      Orange
      Apple 
    Food
     Meat

【问题讨论】:

  • 添加内容时,检查是否尚未添加。但在购物车中,您可能想要添加多个相同种类的商品,因此请考虑保存计数。
  • 您显示的代码不应该发生这种情况;你可以var_dump($_SESSION['SHOPPING_CART']);吗?
  • 您应该使用相关产品的 ID 键入购物车,例如$_SESSION['cart'][$productID] = array('details of product here');。然后,将所有东西都放在一个地方就很简单了。

标签: php mysql arrays session


【解决方案1】:

使用 PHP 的array_unique() 函数。手动here

或者你可以使用记忆技术来检查这个项目是否已经在这个循环的前面看到过。

$itemType = ""; 
foreach ($_SESSION['SHOPPING_CART'] as $itemNumber => $item) {
 if($itemType == $item['type']) {
   // skip...don't print again
 } else { 
    echo $item['type']; 
 }
 if(!isset($memo[$item['name']]))  
 echo $item['name']; 
 $memo[$item['name']] = 1;
 $itemType = $item['type'];
}

【讨论】:

  • 我尝试像这样创建,但不起作用 $result= array( //Item name 'name' => $_GET['add'], 'type' => $_GET[' tipo'], //商品价格 ); $ITEM= array_unique($result);
  • @user2428731 尝试像:$ITEM = $_SESSION['SHOPPING_CART']; $ITEM = array_unique($ITEM); 然后迭代 $ITEM,就像你现在正在做的那样,我的意思是 foreach ($ITEM as $itemNumber => $item) {
  • 您好,它只打印 1 个项目。仅此而已
  • 亲爱的投票者,你能帮我解释一下-1的理由吗?谢谢
  • 嗨!谢谢,我使用那个 $memo,但我在删除时遇到了问题。
【解决方案2】:

只使用 array_unique

foreach (array_unique($_SESSION['SHOPPING_CART']) as $itemNumber => $item) {
     if($itemType == $item['type']) {
       // skip...don't print again
     } else { 
        echo $item['type']; 
     }
     echo $item['name']; 
     $itemType = $item['type'];
    }

【讨论】:

  • @你能发布 pint_r($_SESSION['SHOPPING_CART']) 吗?
  • 仅打印 1 项。因为,当我使用 array_unique 时。如果我有水果:橙子,水果:香蕉。只打印第一个 FRUIT。
  • @user2428731 对这些数据没有帮助,我需要整个数据,似乎它有数组。
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多