<?php
class cart{
var $sortCount; //商品種類數
var $totalCost; //商品總金額
/* 所有的商品,如:$myCart[3][$name]:商品編號爲3的名稱
* $myCart[3][$price]:商品編號爲3的單價
* $myCart[3][$count]:商品編號爲3的數量
* $myCart[3][$cost]:商品編號爲3的合計金額
*/
var $myCart ;
var $Id; //每類商品的ID(數組)
var $Name; //每類商品的名稱(數組)
var $Price; //每類商品的價格(數組)
var $Count; //每類商品的件數(數組)
var $Cost; //每類商品的價值(數組)
//******構造函數
function cart(){
$this->sortCount = 0 ;
$this->totalCost = 0 ;
$this->myCart = array() ;
session_start(); //初始化一個session
if(session_is_registered("myCart")==false) session_register('myCart');
$this->update();
// $this->Calculate();
}
//********私有,根據session的值更新類中相應數據
function update(){
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
if(false==$myCart)
{
$this->sortCount = 0 ;
$this->totalCost = 0 ;
$this->myCart = array() ;
return false;
}
//得到商品的總數量
$this->sortCount=count($myCart);
if($this->sortCount>0)
{
//開始計算商品的金額
$totalCost = 0 ;
foreach($myCart as $key=>$val)
{
//先四捨五入
foreach($val as $proName=>$proVal)
{
if($proName !="name")
{
$val[$proName] = round(eregi_replace(",", "",$proVal),2) ;
$myCart[$key][$proName] = $val[$proName] ;
}
}
//計算每件商品的金額
$myCart[$key]["cost"] = round($val["count"]*$val["price"], 2) ;
//得到所有商品的金額
$totalCost += $myCart[$key]["cost"] ;
}
$this->totalCost = $totalCost ;
$this->myCart = $myCart ;
$_SESSION["myCart"] = $myCart ;
}
}
/**
* 格式化數字爲貨幣數據
*
*
**/
function formatNum($data)
{
foreach($data as $key=>$val)
{
foreach($val as $sName=>$sValue)
{
if($sName !="name")
{
$data[$key][$sName] = number_format($sValue, 2) ;
}
}
}
return $data ;
}
//**************以下爲接口函數
//*** 加一件商品
// 判斷是否藍中已有,如有,加count,否則加一個新商品
//首先都是改session的值,然後再調用update() and calculate()來更新成員變量
function addOne($id,$na,$pr)
{
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
//設置購物車中的數量
$myCart[$id]["name"] = $na ;
$myCart[$id]["price"] = $pr ;
++$myCart[$id]["count"] ;
$_SESSION["myCart"] = $myCart ;
//更新一下類的成員數據
$this->update();
}
/**
* 向購物車中添加一組商品,如果沒有,進行添加,如果已經存在,則更新爲data
* @param $data - 要添加的商品,格式爲:
* $data[0][id], $data[0][name],
* $data[0][price],$data[0][count]
* @return boolean
*/
function addData($data)
{
if(count($data > 0))
{
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
foreach($data as $val)
{
extract($val) ;
//設置購物車中的數量
$myCart[$id]["name"] = $name ;
$myCart[$id]["price"] = $price ;
$myCart[$id]["count"] = $count ;
}
$_SESSION["myCart"] = $myCart ;
//更新一下類的成員數據
$this->update();
}
}
/*
* 更改一件商品的單價
*
*
*
**/
function updatePrice($id, $price)
{
if($price <=0) return false ;
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
if($myCart[$id]==true)
{
$myCart[$id]["price"]=$price;
$_SESSION["myCart"] = $myCart ;
$this->update();
}
}
//將一件商品的數量減1
function removeOne($id)
{
$count = $this->myCart[$id]["count"] ;
if($count>0)
{
$this->modifyCount($id, --$count) ;
}
}
//改變商品的個數,如果傳入單價,則一起更改單價
function modifyCount($id, $ncount, $price=0)
{
if($ncount <= 0) return false ;
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
if($myCart[$id]==true)
{
$myCart[$id]["count"]=$ncount;
//如果有傳入單價,則一起更改單價
if($price >0 ) $myCart[$id]["price"]=$price;
$_SESSION["myCart"] = $myCart ;
$this->update();
}
}
//清空一種商品
function emptyOne($i)
{
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
unset($myCart[$i]) ;
if(count($myCart)==0)
{
$this->emptyAll() ;
}else{
$_SESSION["myCart"] = $myCart ;
$this->update();
}
}
/***************************
清空所有的商品
因爲在win裏PHP不支持session_destroy()函數,所以這個清空函數不完善,
只是把每種商品的個數置爲0。
如果是在linux下,可以直接用session_destroy()來做。
*****************************/
function emptyAll()
{
session_start(); //初始化一個session
$myCart = $_SESSION["myCart"] ;
unset($myCart) ;
$_SESSION["myCart"] = $myCart ;
$this->update();
}
/**
* 返回所有購物車中的數據
*
**/
function getData()
{
if($this->sortCount > 0)
{
return $this->myCart ;
}else{
return array() ;
}
}
//取一件商品的信息,主要的工作函數
//返回一個關聯數組,下標分別對應 id,name,price,count,cost
function getOne($i){
$data = $this->myCart[$i] ;
if(false==$data) return array() ;
$data["id"] = $i ;
return $data ;
}
//取總的商品種類數
function getSortCount(){
return $this->sortCount;
}
//取總的商品價值
function getTotalCost(){
return $this->totalCost;
}
//end class
}
//////////////////////////////////////////////////////////////
$oCart = new cart();
$oCart->addOne('5',"MM",2.4); //添加一件蘋果
$oCart->addOne('4',"GG",2.4); //添加一件蘋果
$myCart=$oCart->getData(); //購物車中的數據
/*下面是調試用的*/
echo "<pre>";
print_r(array_change_key_case($myCart, CASE_UPPER));
echo "</pre>";
exit;
?>