侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

PHP实现的购物车类实例

php  /  管理员 发布于 7年前   166

本文实例讲述了PHP实现的购物车类。分享给大家供大家参考。具体分析如下:

该购物车类是基于CodeIgniter的购物车类仿写实现的。

购物车基本功能如下:

1) 将物品加入购物车
2) 从购物车中删除物品
3) 更新购物车物品信息 【+1/-1】
4) 对购物车物品进行统计
   1. 总项目
   2. 总数量
   3. 总金额
5) 对购物单项物品的数量及金额进行统计
6) 清空购物车

1. cart.php文件:

_cart_contents = $_SESSION['cart_contents'];  } else {   $this->_cart_contents['cart_total'] = 0;   $this->_cart_contents['total_items'] = 0;  }  if($this->debug === TRUE) {   //$this->_log("cart_create_success");  } } /**  * 将物品加入购物车  *  * @access public  * @param array 一维或多维数组,必须包含键值名:       id -> 物品ID标识,       qty -> 数量(quantity),       price -> 单价(price),       name -> 物品姓名  * @return bool  */ public function insert($items = array()) {  //输入物品参数异常  if( ! is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_items_insert");   }   return FALSE;  }  //物品参数处理  $save_cart = FALSE;  if(isset($items['id'])) {   if($this->_insert($items) === TRUE) {    $save_cart = TRUE;   }  } else {   foreach($items as $val) {    if(is_array($val) AND isset($val['id'])) {     if($this->_insert($val) == TRUE) {      $save_cart = TRUE;     }    }   }  }  //当插入成功后保存数据到session  if($save_cart) {   $this->_save_cart();   return TRUE;  }  return FALSE; } /**  * 更新购物车物品信息  *  * @access public  * @param array  * @return bool  */ public function update($items = array()) {  //输入物品参数异常  if( !is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_items_insert");   }   return FALSE;  }  //物品参数处理  $save_cart = FALSE;  if(isset($items['rowid']) AND isset($items['qty'])) {   if($this->_update($items) === TRUE) {    $save_cart = TRUE;   }  } else {   foreach($items as $val) {    if(is_array($val) AND isset($val['rowid']) AND isset($val['qty'])) {     if($this->_update($val) === TRUE) {      $save_cart = TRUE;     }    }   }  }  //当更新成功后保存数据到session  if($save_cart) {   $this->_save_cart();   return TRUE;  }  return FALSE; } /**  * 获取购物车物品总金额  *  * @return int  */ public function total() {  return $this->_cart_contents['cart_total']; } /**  * 获取购物车物品种类  *  * @return int  */ public function total_items() {  return $this->_cart_contents['total_items']; } /**  * 获取购物车  *  * @return array  */ public function contents() {  return $this->_cart_contents; } /**  * 获取购物车物品options  *  * @param string  * @return array  */ public function options($rowid = '') {  if($this->has_options($rowid)) {   return $this->_cart_contents[$rowid]['options'];  } else {   return array();  } } /**  * 清空购物车  *  */ public function destroy() {  unset($this->_cart_contents);  $this->_cart_contents['cart_total'] = 0;  $this->_cart_contents['total_items'] = 0;  unset($_SESSION['cart_contents']); } /**  * 判断购物车物品是否有options选项  *   * @param string  * @return bool  */ private function has_options($rowid = '') {  if( ! isset($this->_cart_contents[$rowid]['options']) OR count($this->_cart_contents[$rowid]['options']) === 0) {   return FALSE;  }  return TRUE; } /**  * 插入数据  *  * @access private   * @param array  * @return bool  */ private function _insert($items = array()) {  //输入物品参数异常  if( ! is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_data_insert");   }   return FALSE;  }  //如果物品参数无效(无id/qty/price/name)  if( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data_invalid");   }   return FALSE;  }  //去除物品数量左零及非数字字符  $items['qty'] = trim(preg_replace('/([^0-9])/i', '', $items['qty']));  $items['qty'] = trim(preg_replace('/^([0]+)/i', '', $items['qty']));  //如果物品数量为0,或非数字,则我们对购物车不做任何处理!  if( ! is_numeric($items['qty']) OR $items['qty'] == 0) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(qty)_invalid");   }   return FALSE;  }  //物品ID正则判断  if( ! preg_match('/^['.$this->product_id_rule.']+$/i', $items['id'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(id)_invalid");   }   return FALSE;  }  //物品名称正则判断  if( ! preg_match('/^['.$this->product_name_rule.']+$/i', $items['name'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(name)_invalid");   }   return FALSE;  }  //去除物品单价左零及非数字(带小数点)字符  $items['price'] = trim(preg_replace('/([^0-9\.])/i', '', $items['price']));  $items['price'] = trim(preg_replace('/^([0]+)/i', '', $items['price']));  //如果物品单价非数字  if( ! is_numeric($items['price'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(price)_invalid");   }   return FALSE;  }  //生成物品的唯一id  if(isset($items['options']) AND count($items['options']) >0) {   $rowid = md5($items['id'].implode('', $items['options']));  } else {   $rowid = md5($items['id']);  }  //加入物品到购物车  unset($this->_cart_contents[$rowid]);  $this->_cart_contents[$rowid]['rowid'] = $rowid;  foreach($items as $key => $val) {   $this->_cart_contents[$rowid][$key] = $val;  }  return TRUE; } /**  * 更新购物车物品信息(私有)  *  * @access private  * @param array  * @return bool  */ private function _update($items = array()) {  //输入物品参数异常  if( ! isset($items['rowid']) OR ! isset($items['qty']) OR ! isset($this->_cart_contents[$items['rowid']])) {   if($this->debug == TRUE) {    $this->_log("cart_items_data_invalid");   }   return FALSE;  }  //去除物品数量左零及非数字字符  $items['qty'] = preg_replace('/([^0-9])/i', '', $items['qty']);  $items['qty'] = preg_replace('/^([0]+)/i', '', $items['qty']);  //如果物品数量非数字,对购物车不做任何处理!  if( ! is_numeric($items['qty'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(qty)_invalid");   }   return FALSE;  }  //如果购物车物品数量与需要更新的物品数量一致,则不需要更新  if($this->_cart_contents[$items['rowid']]['qty'] == $items['qty']) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(qty)_equal");   }   return FALSE;  }  //如果需要更新的物品数量等于0,表示不需要这件物品,从购物车种清除  //否则修改购物车物品数量等于输入的物品数量  if($items['qty'] == 0) {   unset($this->_cart_contents[$items['rowid']]);  } else {   $this->_cart_contents[$items['rowid']]['qty'] = $items['qty'];  }  return TRUE; } /**  * 保存购物车数据到session  *   * @access private  * @return bool  */ private function _save_cart() {  //首先清除购物车总物品种类及总金额  unset($this->_cart_contents['total_items']);  unset($this->_cart_contents['cart_total']);  //然后遍历数组统计物品种类及总金额  $total = 0;  foreach($this->_cart_contents as $key => $val) {   if( ! is_array($val) OR ! isset($val['price']) OR ! isset($val['qty'])) {    continue;   }   $total += ($val['price'] * $val['qty']);   //每种物品的总金额   $this->_cart_contents[$key]['subtotal'] = ($val['price'] * $val['qty']);  }  //设置购物车总物品种类及总金额  $this->_cart_contents['total_items'] = count($this->_cart_contents);  $this->_cart_contents['cart_total'] = $total;  //如果购物车的元素个数少于等于2,说明购物车为空  if(count($this->_cart_contents) <= 2) {   unset($_SESSION['cart_contents']);   return FALSE;  }  //保存购物车数据到session  $_SESSION['cart_contents'] = $this->_cart_contents;  return TRUE; } /**  * 日志记录  *  * @access private  * @param string  * @return bool  */ private function _log($msg) {  return @file_put_contents('cart_err.log', $msg, FILE_APPEND); }}/*End of file cart.php*//*Location /htdocs/cart.php*/

2. cart_demo.php文件如下:

 array(   'id' => 'sp001',   'qty' => 20,   'price' => '10.50',   'name' => 'a002',   'options' => array(       'made' => 'china',       'company' => 'bgi'       )   ),   1 => array(   'id' => 'sp002',   'qty' => 1,   'price' => '3.50',   'name' => 'b002'   )  );$arr = array(   'rowid' => '86dbb7cb58a667558b4bbb1f60330028',   'qty' => 21  );$cart = new Cart();$cart->insert($items);//var_dump($cart->contents());$cart->update($arr);var_dump($cart->contents());//$cart->destroy();//var_dump($_SESSION['cart_contents']);/*end of php*/

希望本文所述对大家的php程序设计有所帮助。

您可能感兴趣的文章:

  • php实现保存周期为1天的购物车类
  • PHP购物车类Cart.class.php定义与用法示例
  • php实现仿写CodeIgniter的购物车类
  • PHP实现的比较完善的购物车类
  • php 购物车完整实现代码
  • php 购物车的例子
  • 深入PHP购物车模块功能分析(函数讲解,附源码)
  • php利用cookies实现购物车的方法
  • php实现购物车功能(以大苹果购物网为例)
  • php+pdo实现的购物车类完整示例


  • 上一条:
    php操作MongoDB类实例
    下一条:
    PHP基于MySQL数据库实现对象持久层的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客