PHPInfiniti分类实例程序,实用的php购物行车路程序

正文实例陈说了PHP完毕的相比较完善的购物车类。分享给大家供我们参谋。具体贯彻格局如下:

实用的php教程购物车程序
原先有用过三个深感没有错,然则看了那一个认为也很好,所以介绍给急需的相爱的野山参谋一下。

实用的php教程购物车程序
以前有用过三个感到没有错,不过看了这一个感到也很好,所以介绍给需求的仇敌参谋一下。

例1

近些年到位一个体系要求运用购物车,考虑到或然时时利用,所以把它封装成多个类,以便现在调用,感兴趣的读者能够轻松的把那个类稍微修改一下就足以用在协和的次第里了.

<?php
//调用实例
require_once ‘cart.class.php’;
session_start();
if(!isset($_SESSION[‘cart’])) {
 $_SESSION[‘cart’] = new Cart;
}
$cart =& $_SESSION[‘cart’];

if(
($_SERVER[‘REQUEST_METHOD’]==”POST”)&&($_POST[‘action’]==’add’)
){
 $p = $_POST[‘p’];
 $items = $cart->add($p);
}
if( ($_GET[PHPInfiniti分类实例程序,实用的php购物行车路程序。’action’]==’remove’)&&($_GET[‘key’]!=””) ) {
 $items = $cart->remove($_GET[‘key’]);
}

if(
($_SERVER[‘REQUEST_METHOD’]==”POST”)&&($_POST[‘action’]==’modi’)
){
 $key = $_POST[‘key’];
 $value = $_POST[‘value’];
 for($i=0;$i<count($key);$i  ){
  $items = $cart->modi($key[$i],$value[$i]);
 }
}

$items = $cart->getCart();
//打印
echo “<table border=1>”;
setlocale(LC_MONETARY, ‘it_IT’);
foreach($items as $item){
 echo “<tr><form method=”post” action=”tmp.php”>”;
 echo “<td>ID:”.$item[‘ID’].”<input type=hidden
name=key[] value=”.$item[‘ID’].”>”;
 echo “<td>产品:”.$item[‘name’];
 echo “<td>单价:”.$item[‘price’];
 echo “<td><input type=text name=value[]
value=”.$item[‘count’].”>”;
  $sum = $item[‘count’]*$item[‘price’];
 echo “<td>合计:”.round($sum,2);
 echo “<td><input type=button value=’删除’
onclick=”location=’?action=remove&key=”.$item[‘ID’].”‘”>”;
}
echo “<input type=hidden name=action value=modi>”;
echo “<tr><td colspan=7><input type=submit />”;
echo “</td></form></tr></table>”;

?>
<hr>
<form method=”post” action=”tmp.php”>
ID:<input type=”text” name=”p[]” />
品名:<input type=”text” name=”p[]” />
单价:<input type=”text” name=”p[]” />
数量:<input type=”text” name=”p[]” />
<input type=hidden name=action value=add>
<input type=”submit” />
</form>

 

<?
/**
 * Cart
 *
 * 购物车类
 *
 * @author  doodoo<pWtitle@yahoo.com.cn>
 * @package     Cart
 * @category    Cart
 * @license     PHP License
 * @access      public
 * @version     $Revision: 1.10 $
 */
Class Cart{

 var $cart;
 var $totalCount; //商品总量据
 var $totalPrices; //商品总金额

  /**
     * Cart Constructor
     *
     * 类的构造函数,使购物车保持平稳的发轫化状态
     *
     * @static
     * @access  public
     * @return  void   无重回值
     * @param   void   无参数
     */
  function Cart(){
  $this->totalCount = 0;
  $this->totalPrice = 0;
  $this->cart = array();
 }
 
 // }}}
    // {{{ add($item)

    /**
 * 增加商品到当下购物车
 *
    * @access public
    * @param  array $item
商品消息(一维数组:array(商品ID,商品名称,商品单价,商品数量))
    * @return array   再次回到当前购物车内商品的数组
    */
 function add($item){
  if(!is_array($item)||is_null($item)) return $this->cart;
  if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
   echo “价格和数据必须是数字”;
   return $this->cart;
  }
  reset($item); //这一句是必须的,因为下面的判断已经移动了数组的指标
  $key = current($item);
  if($key==””) return $this->cart;
  if($this->_isExists($key)){  //商品是不是已经存在?
    $this->cart[$key][‘count’]  = end($item);
  return $this->cart;
  }

  $this->cart[$key][‘ID’]  = $key;
  $this->cart[$key][‘name’] = next($item);
  $this->cart[$key][‘price’] = next($item);
  $this->cart[$key][‘count’] = next($item);

 return $this->cart;
 }

 // }}}
    // {{{ add($item)

    /**
 * 从脚下购物车中收取一些或任何物品
 * 当 $key==”” 的时候,清空当前购物车
 * 当 $key!=””&&$count==”” 的时候,从此时此刻购物车中拣出商品ID号为 $key
的一切货色
 * 当 $key!=””&&$count!=”” 的时候,从当下购物车中拣出 $count个
商品ID号为 $key 的货物
 *
    * @access public
    * @param  string $key 商品ID
    * @return mixed   再次回到真假或当前购物车内商品的数组
    */
 function remove($key=””,$count=””){
  if($key==””) {
   $this->cart = array();
   return true;
  }
  if(!array_key_exists($key,$this->cart)) return false;
  if($count==””){ //移去这一类货色
   unset($this->cart[$key]);
  }else{ //移去$count个商品
   $this->cart[$key][‘count’] -= $count;
   if($this->cart[$key][‘count’]<=0)
unset($this->cart[$key]);
  }
  return $this->cart;
 }

 // }}}
    // {{{ modi($key,$value)

    /**
 * 修改购物车内商品ID为 $key 的物品的数据为 $value
 *
    * @access public
    * @param  string $key 商品ID
    * @param  int $value 商品数量
    * @return array  再次回到当前购物车内商品的数组;
    */
 function modi($key,$value){
  if(!$this->_isExists($key)) return $this->cart(); 
//不真实此商品,直接回到
  if($value<=0){     // value 太小,全部刨除
   unset($this->cart[$key]);
   return $this->cart;
  }
  $this->cart[$key][‘count’] = $value;
  return $this->cart;
 }

    /**
 * 再次回到当前购物车内商品的数组
 *
    * @access public
    * @return array  重回当前购物车内商品的数组;
    */
 function getCart(){
  return $this->cart;
 }

 // }}}
    // {{{ _isExists($key)

    /**
 * 剖断当前购物车中是或不是留存商品ID号为$key的商品
 *
    * @access private
    * @param  string $key 商品ID
    * @return bool   true or false;
    */
    function _isExists($key)
    {
 
if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
   return true;
    return false;
    }

 // }}}
    // {{{ isEmpty()

    /**
 * 判定当前购物车是或不是为空,即未有其余商品
 *
    * @access public
    * @return bool   true or false;
    */
 function isEmpty(){
  return !count($this->cart);
 }

 // }}}
    // {{{ _stat()

    /**
 * 获得局地计算音信
 *
    * @access private
    * @return bool  true or false;
    */
 function _stat(){
  if($this->isEmpty()) return false;
  foreach($this->cart as $item){
   $this->totalCount   = @end($item);
   $this->totalPrices  = @prev($item);
  }
  return true;
 }

 // }}}
    // {{{ totalPrices()

    /**
 * 取妥善前购物车全体商品的总金额
 *
    * @access public
    * @return float  重回金额;
    */
 function totalPrices(){
  if($this->_stat())
   return $this->totalPrices;
 return 0;
 }

 // }}}
    // {{{ isEmpty()

    /**
 * 取稳当前购物车全数商品的总量量和
 *
    * @access public
    * @return int ;
    */
 function totalCount(){
  if($this->_stat())
   return $this->totalCount; 
 return 0;
 }

}//End Class Cart
?>

<?php
//调用实例
require_once ‘cart.class.php’;
session_start();
if(!isset($_SESSION[‘cart’])) {
$_SESSION[‘cart’] = new Cart;
}
$cart =& $_SESSION[‘cart’];

 代码如下

复制代码 代码如下:

if(
($_SERVER[‘REQUEST_METHOD’]==”POST”)&&($_POST[‘action’]==’add’)
){
$p = $_POST[‘p’];
$items = $cart->add($p);
}
if( ($_GET[‘action’]==’remove’)&&($_GET[‘key’]!=””) ) {
$items = $cart->remove($_GET[‘key’]);
}

$yArr    = array(
     1 =>
array(‘id’=>’1′,’parentid’=>0,’name’=>’一流栏目一’),
     2 =>
array(‘id’=>’2′,’parentid’=>0,’name’=>’超级栏目二’),
     3 =>
array(‘id’=>’3′,’parentid’=>1,’name’=>’二级栏目一’),
     4 =>
array(‘id’=>’4′,’parentid’=>1,’name’=>’二级栏目二’),
     5 =>
array(‘id’=>’5′,’parentid’=>2,’name’=>’二级栏目三’),
     6 =>
array(‘id’=>’6′,’parentid’=>3,’name’=>’三级栏目一’),
     7 =>
array(‘id’=>’7′,’parentid’=>3,’name’=>’三级栏目二’),
     8 =>
array(‘id’=>’8′,’parentid’=>2,’name’=>’二级栏目三’),
 );
 
 /**
  * 获取当前id的子ID
  * @param array $data 原始数组
  * @param int $id 当前id
  * @param int $layer 当前层级
  */
 function genCate($data, $pid = 0, $level = 0)
 {
     if($level == 10) break;
     $l        = str_repeat(”    “, $level);
     $l        = $l.’└’;
     static $arrcat    = array();
     $arrcat    = empty($level) ? array() : $arrcat;
     foreach($data as $k => $row)
     {
         /**
          * 假设父ID为当前传出的id
          */
         if($row[‘parentid’] == $pid)
         {
             //要是当前遍历的id不为空
             $row[‘name’]    = $l.$row[‘name’];
             $row[‘level’]    = $level;
             $arrcat[]    = $row;
             //var_array($arr);
             genCate($data, $psiff, $row[‘id’], $level+1);//递归调用
         }
     }
     return $arrcat;
 }
 
 $carr    = genCate($yArr);
 echo “<select>”;
 foreach($carr as $row)
 {
     echo “<option value={$row[‘id’]}>”;
     echo $row[‘name’];
     echo “</option>”;
 }
 echo “</select>”;

<?php
/*****************************************************************************/
/*                                                                          
*/
/* file type:     
包罗文件,建议后缀为.inc                                  */
/*                                                                          
*/
/* file name:     
cart.inc                                                  */
/*                                                                          
*/
/* Description:   
定义二个购车类                                            */
/*                                                                          
*/
/* Func list :     class
cart                                                */
/*                                                                          
*/
/* author :       
bigeagle                                                  */
/*                                                                          
*/
/*                                                                          
*/
/*****************************************************************************/
 
//定义本文件常量
define(“_CART_INC_” , “exists”) ;
 
/*购物车类*/
class TCart
{
 
  var $SortCount;            //商品连串数
  var $TotalCost;            //商品总价值
 
  var $Id;                   //每类货品的ID(数组)
  var $Name;                 //每类货品的名号(数组)
  var $Price;                //每类商品的价钱(数组)
  var $Discount;             //商品的折扣(数组)
  var $GoodPrice ;           //商品的减价价格(数组)
  var $Count;                //每类货品的件数(数组)
  var $马克斯Count ;            //商品范围(数组)
 
  //******构造函数
  function TCart()
  {
   $this->SortCount=0;
 
   session_start(); //开始化二个session
   session_register(‘sId’);
   session_register(‘sName’);
   session_register(‘sPrice’);
   session_register(‘sDiscount’);
   session_register(‘sGoodPrice’) ;
   session_register(‘sCount’) ;
   session_register(‘sMaxCount’) ;
 
   $this->Update();
   $this->Calculate();
  }
 
  //********私家,依据session的值更新类中相应数据
  function Update()
  {
    global
$sId,$sName,$sPrice,$sCount,$sDiscount,$sMaxCount,$sGoodPrice;
 
   if(!isset($sId) or !isset($sName) or !isset($sPrice)
      or !isset($sDiscount) or !isset($sMaxCount)
      or !isset($sGoodPrice) or !isset($sCount)) return;
 
   $this->Id        =$sId;
   $this->Name      =$sName;
   $this->Price     =$sPrice;
   $this->Count     =$sCount;
   $this->Discount  = $sDiscount ;
   $this->GoodPrice = $sGoodPrice ;
   $this->MaxCount  = $sMaxCount ;
 
   //总计商品总额
   $this->SortCount=count($sId);
 
  }
 
 
//********私家,依据新的数码总括每类商品的市场总值及任何货色的总价
  function Calculate()
  {
   for($i=0;$i<$this->SortCount;$i++)
   {
     /*算算每件货色的价值,如果折扣是0 ,则为减价价格*/
     $GiftPrice = ($this->Discount[$i] == 0 ? $this->GoodPrice
:
                   ceil($this->Price[$i] *
$this->Discount[$i])/100 );
     $this->TotalCost += $GiftPrice * $this->Count[$i] ;
   }
  }
 
  //**************以下为接口函数
 
  //*** 加一件货色
  // 决断是或不是蓝中已有,如有,加count,否则加二个新商品
  //首先都是改session的值,然后再调用update() and
calculate()来更新成员变量
  function Add($a_ID , $a_Name , $a_Price , $a_Discount ,
               $a_GoodPrice , $a_MaxCount , $a_Count)
  {
   global $sId , $sName , $sCount , $sPrice , $sDiscount ,
          $sGoodPrice , $sMaxCount ;
 
   $k=count($sId);
   for ($i=0; $i<$k; $i++)
   { //先找一下是否业已投入了这种商品
     if($sId[$i]==$a_ID)
     {
      $sCount[$i] += $a_Count ;
      break;
     }
   }
   if($i >= $k)
   { //没有则加一个新商品系列
    $sId[]        = $a_亚洲必赢官网 ,ID;
    $sName[]      = $a_Name;
    $sPrice[]     = $a_Price;
    $sCount[]     = $a_Count;
    $sGoodPrice[] = $a_GoodPrice ;
    $sDiscount[]  = $a_Discount ;
    $sMaxCount[]  = $a_MaxCount ;
   }
 
   $this->Update(); //更新一下类的分子数量
   $this->Calculate();
  }
 
  //移去一件货品
  function Remove($a_ID)
  {
   global $sId , $sName , $sCount , $sPrice , $sDiscount ,
          $sGoodPrice , $sMaxCount ;
 
   $k = count($sId);
   for($i=0; $i < $k; $i++)
   {
     if($sId[$i] == $a_ID)
     {
       $sCount[$i] = 0 ;
       break;
     }
   }
 
   $this->Update();
   $this->Calculate();
  }
 
  //退换商品的个数
  function ModifyCount($a_i,$a_Count)
  {
   global $sCount;
 
   $sCount[$a_i] = $a_Count ;
   $this->Update();
   $this->Calculate();
  }
 
  /***************************
  清空全体的货品
  *****************************/
  function RemoveAll()
  {
   session_unregister(‘sId’);
   session_unregister(‘sName’);
   session_unregister(‘sPrice’);
   session_unregister(‘sDiscount’);
   session_unregister(‘sGoodPrice’) ;
   session_unregister(‘sCount’) ;
   session_unregister(‘sMaxCount’) ;
   $this->SortCount = 0 ;
   $this->TotalCost = 0 ;
  }
 
  //是还是不是某件商品已在蓝内,参数为此商品的ID
  function Exists($a_ID)
  {
   for($i=0; $i<$this->SortCount; $i++)
   {
     if($this->Id[$i]==$a_ID) return TRUE;
   }
   return FALSE;
  }
 
  //某件商品在蓝内的职分
  function IndexOf($a_ID)
  {
   for($i=0; $i<$this->SortCount; $i++)
   {
    if($this->Id[$i]==$id) return $i;
   }
   return 0;
  }
 
  //取一件货色的音讯,首要的专门的职业函数
  //重返一个涉及数组,
  function Item($i)
  {
   $Result[id]        = $this->Id[$i];
   $Result[name]      = $this->Name[$i];
   $Result[price]     = $this->Price[$i];
   $Result[count]     = $this->Count[$i];
   $Result[discount]  = $this->Discount[$i] ;
   $Result[goodprice] = $this->GoodPrice[$i] ;
   $Result[maxcount]  = $this->MaxCount[i] ;
   return $Result;
  }
 
  //取总的商品连串数
  function CartCount()
  {
   return $this->SortCount;
  }
 
  //取总的商品价值
  function GetTotalCost()
  {
   return $this->TotalCost;
  }

?>

if(
($_SERVER[‘REQUEST_METHOD’]==”POST”)&&($_POST[‘action’]==’modi’)
){
$key = $_POST[‘key’];
$value = $_POST[‘value’];
for($i=0;$i<count($key);$i ){
$items = $cart->modi($key[$i],$value[$i]);
}
}

注:因为是最佳次的调用,所以本身加了个决断,在层级$level=10的时候让他跳出。未有哪位寻常网址会放超越10层的

但愿本文所述对大家的PHP程序设计具有援助。

$items = $cart->getCart();
//打印
echo “<table border=1>”;
setlocale(LC_MONETARY, ‘it_IT’);
foreach($items as $item){
echo “<tr><form method=”post” action=”tmp.php”>”;
echo “<td>ID:”.$item[‘ID’].”<input type=hidden name=key[]
value=”.$item[‘ID’].”>”;
echo “<td>产品:”.$item[‘name’];
echo “<td>单价:”.$item[‘price’];
echo “<td><input type=text name=value[]
value=”.$item[‘count’].”>”;
$sum = $item[‘count’]*$item[‘price’];
echo “<td>合计:”.round($sum,2);
echo “<td><input type=button value=’删除’
onclick=”location=’?action=remove&key=”.$item[‘ID’].”‘”>”;
}
echo “<input type=hidden name=action value=modi>”;
echo “<tr><td colspan=7><input type=submit />”;
echo “</td></form></tr></table>”;

目录结构吧。

你只怕感兴趣的小说:

  • php 购物车全部兑当代码
  • php购物车达成代码
  • php 购物车的例证
  • php网络超级市场购物车设计代码分享
  • 深切PHP购物网络麻豆块功用深入分析(函数讲明,附源码)
  • PHP购物车类Cart.class.php定义与用法示例
  • php落成仿写CodeIgniter的购物车类
  • PHP落成的购物车类实例
  • php达成购物车作用(上)
  • php完结保存周期为1天的购物车类

?>
<hr>
<form method=”post” action=”tmp.php”>
ID:<input type=”text” name=”p[]” />
品名:<input type=”text” name=”p[]” />
单价:<input type=”text” name=”p[]” />
数量:<input type=”text” name=”p[]” />
<input type=hidden name=action value=add>
<input type=”submit” />
</form>

施行到static变量后,判别下当前层级,若是层级为0,那么表示那是最高等菜单,须求清空$arrcate的数额重复注明

 

例2

<?
/**
* Cart
*
* 购物车类
*
* @author doodoo<pWtitle@yahoo.com.cn>
* @package Cart
* @category Cart
* @license PHP License
* @access public
* @version $Revision: 1.10 $
*/
Class Cart{

 代码如下

var $cart;
var $totalCount; //商品总的数量据
var $totalPrices; //商品总金额

//我们建叁个表”class”
CREATE TABLE `class` (
`id` int(11) NOT NULL auto_increment COMMENT ‘分类id’,
`f_id` int(11) NOT NULL COMMENT ‘父id’,
`name` varchar(25) collate gbk_bin NOT NULL COMMENT ‘分类名称’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin AUTO_INCREMENT=1 ;

/**
* Cart Constructor
*
* 类的构造函数,使购物车保持平稳的开端化状态
*
* @static
* @access public
* @return void 无重临值
* @param void 无参数
*/
function Cart(){
$this->totalCount = 0;
$this->totalPrice = 0;
$this->cart = array();
}

代码

// }}}
// {{{ add($item)

 代码如下

/**
* 扩展商品到眼下购物车
*
* @access public
* @param array $item
商品音讯(一维数组:array(商品ID,商品名称,商品单价,商品数量))
* @return array 再次来到当前购物车内商品的数组
*/
function add($item){
if(!is_array($item)||is_null($item)) return $this->cart;
if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
echo “价格和数码必须是数字”;
return $this->cart;
}
reset($item); //这一句是必须的,因为地点的决断已经移动了数组的指标
$key = current($item);
if($key==””) return $this->cart;
if($this->_isExists($key)){ //商品是还是不是已经存在?
$this->cart[$key][‘count’] = end($item);
return $this->cart;
}

< ?php 

$this->ca(www.111cn.net)rt[$key][‘ID’] = $key;
$this->cart[$key][‘name’] = next($item);
$this->cart[$key][‘price’] = next($item);
$this->cart[$key][‘count’] = next($item);

header(“Content-type:text/html;charset=utf-8”); 

return $this->cart;
}

$db=new mysqli(“localhost”,”root”,””,”news_php100″) ; 
//实例化一个数据库连接。使用那一个前绝对要保管已经加载了mysqli类库,
或者用mysql_connect这么些点子连接。 

// }}}
// {{{ add($item)

if(mysqli_connect_errno()){

/**
* 从眼下购物车中抽出一些或任何货色
* 当 $key==”” 的时候,清空当前购物车
* 当 $key!=””&&$count==”” 的时候,从当前购物车中拣出商品ID号为 $key
的全部货品
* 当 $key!=””&&$count!=”” 的时候,从最近购物车中拣出 $count个
商品ID号为 $key 的商品
*
* @access public
* @param string $key 商品ID
* @return mixed 重临真假或当前购物车内商品的数组
*/
function remove($key=””,$count=””){
if($key==””) {
$this->cart = array();
return true;
}
if(!array_key_exists($key,$this->cart)) return false;
if($count==””){ //移去这一类商品
unset($this->cart[$key]);
}else{ //移去$count个商品
$this->cart[$key][‘count’] -= $count;
if($this->cart[$key][‘count’]<=0)
unset($this->cart[$key]);
}
return $this->cart;
}

echo “链接失利:”.mysqli_connect_error();

// }}}
// {{{ modi($key,$value)

exit(); } 

/**
* 修改购物车内商品ID为 $key 的货物的数据为 $value
*
* @access public
* @param string $key 商品ID
* @param int $value 商品数量
* @return array 再次回到当前购物车内商品的数组;
*/
function modi($key,$value){
if(!$this->_isExists($key)) return $this->cart();
//荒诞不经此商品,直接回到
if($value<=0){ // value 太小,全体刨除
unset($this->cart[$key]);
return $this->cart;
}
$this->cart[$key][‘count’] = $value;
return $this->cart;
}

$db->query(“set names utf8”);

/**
* 再次来到当前购物车内商品的数组
*
* @access public
* @return array 再次来到当前购物车内商品的数组;
*/
function getCart(){
return $this->cart;
}

$result=$db->query(“select name from class where f_id=0”); 
//查找f_id=0的归类,也等于探究每三个大类。

// }}}
// {{{ _isExists($key)

while($row=$result->fetch_assoc()){

/**
* 判别当前购物车中是或不是存在商品ID号为$key的商品
*
* @access private
* @param string $key 商品ID
* @return bool true or false;
*/
function _isExists($key)
{
if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
return true;
return false;
}

echo $row[‘name’].”< br>”; //那样就把各种大类循环出来了。

// }}}
// {{{ isEmpty()

}

/**
* 剖断当前购物车是还是不是为空,即未有其他物品
*
* @access public
* @return bool true or false;
*/
function isEmpty(){
return !count($this->cart);
}

//同样大家能够把音信的子类循环出来。

// }}}
// {{{ _stat()

$result=$db->query(“select * from class where f_id=1”); 
//查找f_id=1的归类,也正是搜索‘音讯’的子类。

/**
* 获得一些总括新闻
*
* @access private
* @return bool true or false;
*/
function _stat(){
if($this->isEmpty()) return false;
foreach($this->cart as $item){
$this->totalCount = @end($item);
$this->totalPrices = @prev($item);
}
return true;
}

while($row=$result->fetch_assoc()){

// }}}
// {{{ totalPrices()

echo $row[‘name’].”

/**
* 取稳妥前购物车全数商品的总金额
*
* @access public
* @return float 重临金额;
*/
function totalPrices(){
if($this->_stat())
return $this->totalPrices;
return 0;
}

“; //那样就把‘新闻’的子类循环出来了。注意:只是子类,不包蕴外甥类。

// }}}
// {{{ isEmpty()

}

/**
* 取妥贴前购物车全部商品的总量据和
*
* @access public
* @return int ;
*/
function totalCount(){
if($this->_stat())
return $this->totalCount;
return 0;
}

//写到这里,大家会意识三个难点,假若那一个分类是10级分类,难道大家要写
12个巡回把它每一个子类循环出来?假若是越多级分类呢,那样写显明是不现实的。

}//End Class Cart
?>
from:

//那又有怎样方法化解吗?大家能够写三个递归的函数,把f_id作为参数字传送入,

不仅仅循环每贰个f_id的值,也便是说把每贰个f_id值的子类循环出来。

//首先大家把各种分类的值保存在两个二维数组中,在底下的递归函数里有用。

 代码如下

$result=$db->query(“select * from class”);

while($row=$result->fetch_assoc()){

$arr[]=array($row[id],$row[f_id],$row[name]); //每一行保存一个
分类的id,f_id,name的信息。

}

function fenlei($f_id=0){ //$f_id初步化为0,也便是从最大分类开首循环.

global $arr; //评释$arr为全局变量才可在函数里援用。

for($i=0;$i< count($arr);$i++){ //对每一个分类进行巡回。

if($arr[$i][1]==$f_id){ //$arr[$i][1]代表第$i+1个分类的f_id的值。
开始$f_id=0,也正是把f_id=0的分类输出来。

echo $arr[$i][2].”<
br>”; //$arr[$i][1]代表第$i+1个分类的name的值。

fenlei($arr[$i][0]); //$arr[$i][1]代表第$i+1个分类的id的值。实行递归
,也等于把团结的id作为f_id参数把团结的子类再循环出来。

}

}

}

fenlei(); //使用那个函数.

?> 

例3

phpInfiniti分类, 帮助出口树状图

 代码如下

<?php
/**
* 通用的树型类,能够扭转任何树型结构
*/
class tree
{
 /**
 * 生成树型结构所急需的2维数组
 * @var array
 */
 var $arr = array();

 /**
 * 生成树型结构所需修饰符号,能够换到图片
 * @var array
 */
 var $icon = array(‘│’,’├’,’└’);

 /**
 * @access private
 */
 var $ret = ”;

 /**
 * 构造函数,开端化类
 * @param array 2维数组,例如:
 * array(
 *      1 =>
array(‘id’=>’1′,’parentid’=>0,’name’=>’一流栏目一’),
 *      2 =>
array(‘id’=>’2′,’parentid’=>0,’name’=>’超级栏目二’),
 *      3 =>
array(‘id’=>’3′,’parentid’=>1,’name’=>’二级栏目一’),
 *      4 =>
array(‘id’=>’4′,’parentid’=>1,’name’=>’二级栏目二’),
 *      5 =>
array(‘id’=>’5′,’parentid’=>2,’name’=>’二级栏目三’),
 *      6 =>
array(‘id’=>’6′,’parentid’=>3,’name’=>’三级栏目一’),
 *      7 =>
array(‘id’=>’7′,’parentid’=>3,’name’=>’三级栏目二’)
 *      )
 */
 function tree($arr=array())
 {
       $this->arr = $arr;
    $this->ret = ”;
    return is_array($arr);
 }

    /**
 * 获得父级数组
 * @param int
 * @return array
 */
 function get_parent($myid)
 {
  $newarr = array();
  if(!isset($this->arr[$myid])) return false;
  $pid = $this->arr[$myid][‘parentid’];
  $pid = $this->arr[$pid][‘parentid’];
  if(is_array($this->arr))
  {
   foreach($this->arr as $id => $a)
   {
    if($a[‘parentid’] == $pid) $newarr[$id] = $a;
   }
  }
  return $newarr;
 }

    /**
 * 获得子级数组
 * @param int
 * @return array
 */
 function get_child($myid)
 {
  $a = $newarr = array();
  if(is_array($this->arr))
  {
   foreach($this->arr as $id => $a)
   {
    if($a[‘parentid’] == $myid) $newarr[$id] = $a;
   }
  }
  return $newarr ? $newarr : false;
 }

    /**
 * 得到当前地点数组
 * @param int
 * @return array
 */
 function get_pos($myid,&$newarr)
 {
  $a = array();
  if(!isset($this->arr[$myid])) return false;
        $newarr[] = $this->arr[$myid];
  $pid = $this->arr[$myid][‘parentid’];
  if(isset($this->arr[$pid]))
  {
      $this->get_pos($pid,$newarr);
  }
  if(is_array($newarr))
  {
   krsort($newarr);
   foreach($newarr as $v)
   {
    $a[$v[‘id’]] = $v;
   }
  }
  return $a;
 }

 /**
  * ————————————-
  *  获得树型结构
  * ————————————-
  * @author  Midnight(杨云洲),  yangyunzhou@foxmail.com
  * @param $myid 表示收获这么些ID下的保有子级
  * @param $str 生成树形结构为主代码, 比如: “<option value=$id

$select>$spacer$name</option>”
  * @param $sid 被选中的ID, 比如在做树形下拉框的时候须要选择
  * @param $adds
  * @param $str_group
  * @return unknown_type
  */
 function get_tree($myid, $str, $sid = 0, $adds = ”, $str_group =
”)
 {
  $number=1;
  $child = $this->get_child($myid);
  if(is_array($child))
  {
      $total = count($child);
   foreach($child as $id=>$a)
   {
    $j=$k=”;
    if($number==$total)
    {
     $j .= $this->icon[2];
    }
    else
    {
     $j .= $this->icon[1];
     $k = $adds ? $this->icon[0] : ”;
    }
    $spacer = $adds ? $adds.$j : ”;
    $selected = $id==$sid ? ‘selected’ : ”;
    @extract($a);
    $parentid == 0 && $str_group ? eval(“$nstr = “$str_group”;”) :
eval

(“$nstr = “$str”;”);
    $this->ret .= $nstr;
    $this->get_tree($id, $str, $sid,
$adds.$k.’ ‘,$str_group);
    $number++;
   }
  }
  return $this->ret;
 }
    /**
 * 同上一艺术类似,但允许多选
 */
 function get_tree_multi($myid, $str, $sid = 0, $adds = ”)
 {
  $number=1;
  $child = $this->get_child($myid);
  if(is_array($child))
  {
      $total = count($child);
   foreach($child as $id=>$a)
   {
    $j=$k=”;
    if($number==$total)
    {
     $j .= $this->icon[2];
    }
    else
    {
     $j .= $this->icon[1];
     $k = $adds ? $this->icon[0] : ”;
    }
    $spacer = $adds ? $adds.$j : ”;

    $selected = $this->have($sid,$id) ? ‘selected’ : ”;
    //echo $sid.’=>’.$id.’ : ‘.$selected.’ . <br/>’;
    @extract($a);
    eval(“$nstr = “$str”;”);
    $this->ret .= $nstr;
    $this->get_tree_multi($id, $str, $sid, $adds.$k.’ ‘);
    $number++;
   }
  }
  return $this->ret;
 }

 function have($list,$item){
  return(strpos(‘,,’.$list.’,’,’,’.$item.’,’));
 }
}
?>

注:无平台限制,只须求报告id,parentid,name 就可以
上面总括了二种Infiniti分类代码都并未有平台限制哦,然则只可以使用在php中,我们只要搞清楚id,parentid,name三者的关

系即可。

网站地图xml地图