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实现首页链接查询 友情链接检查的代码
Jan 05 PHP
PHP安全性漫谈
Jun 28 PHP
php类中private属性继承问题分析
Nov 01 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
加载 Javascript 最佳实践
2011/10/30 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python数据抓取3种方法总结
2021/02/07 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
经销商会议欢迎词
2014/01/11 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
教师工作表现自我评价
2015/03/05 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
门卫管理制度范本
2015/08/05 职场文书
python如何获取网络数据
2021/04/11 Python
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
MySQL 数据库范式化设计理论
2022/04/22 MySQL