php实现保存周期为1天的购物车类


Posted in PHP onJuly 07, 2017

本文实例为大家分享了php购物车类的具体代码,供大家参考,具体内容如下

购物车类 Cookies 保存,保存周期为1天 注意:浏览器必须支持Cookie才能够使用

示例代码:

<?php
/**
 * 购物车类 Cookies 保存,保存周期为1天 注意:浏览器必须支持Cookie才能够使用
 */
class CartAPI {
  private $CartArray = array(); // 存放购物车的二维数组
  private $CartCount; // 统计购物车数量
  public $Expires = 86400; // Cookies过期时间,如果为0则不保存到本地 单位为秒
  /**
   * 构造函数 初始化操作 如果$Id不为空,则直接添加到购物车
   *
   */
  public function __construct($Id = "",$Name = "",$Price1 = "",$Price2 = "",$Price3 = "",$Count = "",$Image = "",$Expires = 86400) {
    if ($Id != "" && is_numeric($Id)) {
      $this->Expires = $Expires;
      $this->addCart($Id,$Name,$Price1,$Price2,$Price3,$Count,$Image);
    }
  }
  /**
   * 添加商品到购物车
   *
   * @param int $Id 商品的编号
   * @param string $Name 商品名称
   * @param decimal $Price1 商品价格
   * @param decimal $Price2 商品价格
   * @param decimal $Price3 商品价格
   * @param int $Count 商品数量
   * @param string $Image 商品图片
   * @return 如果商品存在,则在原来的数量上加1,并返回false
   */
  public function addCart($Id,$Name,$Price1,$Price2,$Price3,$Count,$Image) {
    $this->CartArray = $this->CartView(); // 把数据读取并写入数组
    if ($this->checkItem($Id)) { // 检测商品是否存在
      $this->ModifyCart($Id,$Count,0); // 商品数量加$Count
      return false;
    }
    $this->CartArray[0][$Id] = $Id;
    $this->CartArray[1][$Id] = $Name;
    $this->CartArray[2][$Id] = $Price1;
    $this->CartArray[3][$Id] = $Price2;
    $this->CartArray[4][$Id] = $Price3;
    $this->CartArray[5][$Id] = $Count;
    $this->CartArray[6][$Id] = $Image;
    $this->save();
  }
  /**
   * 修改购物车里的商品
   *
   * @param int $Id 商品编号
   * @param int $Count 商品数量
   * @param int $Flag 修改类型 0:加 1:减 2:修改 3:清空
   * @return 如果修改失败,则返回false
   */
  public function ModifyCart($Id, $Count, $Flag = "") {
    $tmpId = $Id;
    $this->CartArray = $this->CartView(); // 把数据读取并写入数组
    $tmpArray = &$this->CartArray; // 引用
    if (!is_array($tmpArray[0])) return false;
    if ($Id < 1) {
      return false;
    }
    foreach ($tmpArray[0] as $item) {
      if ($item === $tmpId) {
        switch ($Flag) {
          case 0: // 添加数量 一般$Count为1
            $tmpArray[5][$Id] += $Count;
            break;
          case 1: // 减少数量
            $tmpArray[5][$Id] -= $Count;
            break;
          case 2: // 修改数量
            if ($Count == 0) {
              unset($tmpArray[0][$Id]);
              unset($tmpArray[1][$Id]);
              unset($tmpArray[2][$Id]);
              unset($tmpArray[3][$Id]);
              unset($tmpArray[4][$Id]);
              unset($tmpArray[5][$Id]);
              unset($tmpArray[6][$Id]);
              break;
            } else {
              $tmpArray[5][$Id] = $Count;
              break;
            }
          case 3: // 清空商品
            unset($tmpArray[0][$Id]);
            unset($tmpArray[1][$Id]);
            unset($tmpArray[2][$Id]);
            unset($tmpArray[3][$Id]);
            unset($tmpArray[4][$Id]);
            unset($tmpArray[5][$Id]);
            unset($tmpArray[6][$Id]);
            break;
          default:
            break;
        }
      }
    }
    $this->save();
  }
  /**
   * 清空购物车
   *
   */
  public function RemoveAll() {
    $this->CartArray = array();
    $this->save();
  }
  /**
   * 查看购物车信息
   *
   * @return array 返回一个二维数组
   */
  public function CartView() {
    $cookie = stripslashes($_COOKIE['CartAPI']);
    if (!$cookie) return false;
    $tmpUnSerialize = unserialize($cookie);
    return $tmpUnSerialize;
  }
  /**
   * 检查购物车是否有商品
   *
   * @return bool 如果有商品,返回true,否则false
   */
  public function checkCart() {
    $tmpArray = $this->CartView();
    if (count($tmpArray[0]) < 1) {      
      return false;
    }
    return true;
  }
  /**
   * 商品统计
   *
   * @return array 返回一个一维数组 $arr[0]:产品1的总价格 $arr[1:产品2得总价格 $arr[2]:产品3的总价格 $arr[3]:产品的总数量
   */
  public function CountPrice() {
    $tmpArray = $this->CartArray = $this->CartView();
    $outArray = array(); //一维数组
    // 0 是产品1的总价格
    // 1 是产品2的总价格
    // 2 是产品3的总价格
    // 3 是产品的总数量
    $i = 0;
    if (is_array($tmpArray[0])) {
      foreach ($tmpArray[0] as $key=>$val) {
        $outArray[0] += $tmpArray[2][$key] * $tmpArray[5][$key];
        $outArray[1] += $tmpArray[3][$key] * $tmpArray[5][$key];
        $outArray[2] += $tmpArray[4][$key] * $tmpArray[5][$key];
        $outArray[3] += $tmpArray[5][$key];
        $i++;
      }
    }
    return $outArray;
  }
  /**
   * 统计商品数量
   *
   * @return int
   */
  public function CartCount() {
    $tmpArray = $this->CartView();
    $tmpCount = count($tmpArray[0]);
    $this->CartCount = $tmpCount;
    return $tmpCount;
  }
  /**
   * 保存商品 如果不使用构造方法,此方法必须使用
   *
   */
  public function save() {
    $tmpArray = $this->CartArray;
    $tmpSerialize = serialize($tmpArray);
    setcookie("CartAPI",$tmpSerialize,time()+$this->Expires);
  }
  /**
   * 检查购物车商品是否存在
   *
   * @param int $Id
   * @return bool 如果存在 true 否则false
   */
  private function checkItem($Id) {
    $tmpArray = $this->CartArray;
    if (!is_array($tmpArray[0])) return;
    foreach ($tmpArray[0] as $item) {
      if ($item === $Id) return true;
    }
    return false;
  }
}
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php下使用以下代码连接并测试
Apr 09 PHP
php 301转向实现代码
Sep 18 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 #PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 #PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 #PHP
微信开发之获取JSAPI TICKET
Jul 07 #PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 #PHP
一个实用的php验证码类
Jul 06 #PHP
万能的php分页类
Jul 06 #PHP
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
如何使用PHP往windows中添加用户
2006/12/06 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
JS实现页面打印功能
2017/03/16 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
java中两个byte数组实现合并的示例
2018/05/09 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
志愿者服务感言
2014/02/27 职场文书
市场推广策划方案
2014/06/02 职场文书
优秀家长自荐材料
2014/08/26 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
Nginx速查手册及常见问题
2022/04/07 Servers