国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP實現的無限分類類庫定義與用法示例【基于thinkPHP】

PHP實現的無限分類類庫定義與用法示例【基于thinkPHP】

2019-09-16 16:17燈火cj闌珊 PHP教程

這篇文章主要介紹了PHP實現的無限分類類庫定義與用法,結合實例形式分析了基于thinkPHP實現的無限分類類庫相關定義及具體使用操作技巧,需要的朋友可以參考下

本文實例講述了PHP實現的無限分類類庫定義與用法。分享給大家供大家參考,具體如下:

/*
功能:基于TP2.0的無限分類。
用法:
第一種用法,不采用數據庫,可以不需要TP,例子如下
<?php
require('Category.class.php');//導入Category.class.php類
//測試數據
$data[]=array('cat_id'=>1,'pid'=>0,'name'=>'中國');
$data[]=array('cat_id'=>2,'pid'=>0,'name'=>'美國');
$data[]=array('cat_id'=>3,'pid'=>0,'name'=>'韓國');
$data[]=array('cat_id'=>4,'pid'=>1,'name'=>'北京');
$data[]=array('cat_id'=>5,'pid'=>1,'name'=>'上海');
$data[]=array('cat_id'=>6,'pid'=>1,'name'=>'廣西');
$data[]=array('cat_id'=>7,'pid'=>6,'name'=>'桂林');
$data[]=array('cat_id'=>8,'pid'=>6,'name'=>'南寧');
$data[]=array('cat_id'=>9,'pid'=>6,'name'=>'柳州');
$data[]=array('cat_id'=>10,'pid'=>2,'name'=>'紐約');
$data[]=array('cat_id'=>11,'pid'=>2,'name'=>'華盛頓');
$data[]=array('cat_id'=>12,'pid'=>3,'name'=>'首爾');
$cat=new Category('',array('cat_id','pid','name','cname'));
$s=$cat->getTree($data);//獲取分類數據樹結構
//$s=$cat->getTree($data,1);獲取pid=1所有子類數據樹結構
foreach($s as $vo)
{
echo $vo['cname'].'<br>';
}
第二種用法,采用數據庫,基于TP,例子如下
數據表,前綴_articlec_cat,包含cat_id,pid,title三個字段
require('Category.class.php');//導入Category.class.php類
$cat=new Category('ArticleCat',array('cat_id','pid','title','fulltitle'));
$s=$cat->getList();//獲取分類結構
$s=$cat->getList('',1);//獲取pid=1的子分類結構
$s=$cat->getList($condition,1);//$condition為查詢條件,獲取pid=1的子分類結構
$s=$cat->getPath(3);//獲取分類id=3的路徑
$s=$cat->add($data);//添加分類,$data需要包含上級分類pid
$s=$cat->edit($data);//修改分類,$data需要包含分類ID
$s=$cat->del(10);//刪除分類id=10的分類
詳細用法:參考代碼說明
/**
+------------------------------------------------------------------------------
* 分類管理
+------------------------------------------------------------------------------
*/
class Category
{
  //分類的數據表模型
  private $model;
  //原始的分類數據
  private $rawList = array();
  //格式化后的分類
  private $formatList = array();
  //錯誤信息
  private $error = "";
  //格式化的字符
  private $icon = array(' │', ' ├ ', ' └ ');
  //字段映射,分類id,上級分類pid,分類名稱title,格式化后分類名稱fulltitle
  private $field = array();
  /*
  功能:構造函數,對象初始化;
  屬性:public;
  參數:$model,數組或對象,基于TP2.0的數據表模型名稱,若不采用TP2.0,可傳遞空值。
  $field,字段映射,分類id,上級分類pid,分類名稱title,格式化后分類名稱fulltitle
  依次傳遞,例如在分類數據表中,分類id,字段名為CatID,上級分類pid,字段名稱name,希望格式化分類后輸出cname,
  則,傳遞參數為,$field('CatID','pid','name','cname');若為空,則采用默認值。
  返回:無
  備注:用到了TP的D函數
  */
  public function __construct($model = '', $field = array())
  {
    //判斷參數類型
    if (is_string($model) && (!empty($model))) {
      if (!$this->model = D($model)) //注意這里的D函數需要TP支持
        $this->error = $model . "模型不存在!";
    }
    if (is_object($model)) {
      $this->model =& $model;
    }
    $this->field['id']    = $field['0'] ? $field['0'] : 'id';
    $this->field['pid']    = $field['1'] ? $field['1'] : 'pid';
    $this->field['title']   = $field['2'] ? $field['2'] : 'title';
    $this->field['fulltitle'] = $field['3'] ? $field['3'] : 'fulltitle';
  }
  /*
  功能:獲取分類信息數據;
  屬性:private;
  參數:查詢條件$condition;
  返回:無;
  備注:需要TP支持
  */
  private function _findAllCat($condition, $orderby = NULL)
  {
    if (empty($orderby)) {
      $this->rawList = $this->model->where($condition)->findAll();
    } else {
      $this->rawList = $this->model->where($condition)->order($orderby)->findAll();
    }
  }
  /*
  功能:返回給定上級分類$pid的所有同一級子分類;
  屬性:public;
  參數:上級分類$pid;
  返回:子分類,二維數組;
  備注:
  */
  public function getChild($pid)
  {
    $childs = array();
    foreach ($this->rawList as $Category) {
      if ($Category[$this->field['pid']] == $pid)
        $childs[] = $Category;
    }
    return $childs;
  }
  /*
  功能:無限分類核心部分,遞歸格式化分類前的字符;
  屬性:private;
  參數:分類id,前導空格;
  返回:無;
  備注:
  */
  private function _searchList($CatID = 0, $space = "")
  {
    //下級分類的數組
    $childs = $this->getChild($CatID);
    //如果沒下級分類,結束遞歸
    if (!($n = count($childs)))
      return;
    $cnt = 1;
    //循環所有的下級分類
    for ($i = 0; $i < $n; $i++) {
      $pre = "";
      $pad = "";
      if ($n == $cnt) {
        $pre = $this->icon[2];
      } else {
        $pre = $this->icon[1];
        $pad = $space ? $this->icon[0] : "";
      }
      $childs[$i][$this->field['fulltitle']] = ($space ? $space . $pre : "") . $childs[$i][$this->field['title']];
      $this->formatList[]          = $childs[$i];
      //遞歸下一級分類
      $this->_searchList($childs[$i][$this->field['id']], $space . $pad . " ");
      $cnt++;
    }
  }
  /*
  功能:不采用數據模型時,可以從外部傳遞數據,得到遞歸格式化分類;
  屬性:public;
  參數:$condition,數字或字符串,需要符合TP查詢條件規則,起始分類id,$CatID=0;
  $orderby 排序參數
  返回:遞歸格式化分類數組;
  備注:需要TP支持
  */
  public function getList($condition = NULL, $CatID = 0, $orderby = NULL)
  {
    unset($this->rawList);
    unset($this->formatList);
    $this->_findAllCat($condition, $orderby, $orderby);
    $this->_searchList($CatID);
    return $this->formatList;
  }
  /*
  功能:不采用數據模型時,可以從外部傳遞數據,得到遞歸格式化分類;
  屬性:public;
  參數:$data,二維數組,起始分類id,默認$CatID=0;
  返回:遞歸格式化分類數組;
  備注:
  */
  public function getTree($data, $CatID = 0)
  {
    unset($this->rawList);
    unset($this->formatList);
    $this->rawList = $data;
    $this->_searchList($CatID);
    return $this->formatList;
  }
  /*
  功能:獲取錯誤信息;
  屬性:public;
  參數:無;
  返回:錯誤信息字符串;
  備注:
  */
  public function getError()
  {
    return $this->error;
  }
  /*
  功能:檢查分類參數$CatID,是否為空;
  屬性:private;
  參數:分類參數$CatID,整型。
  返回:正確,返回true,錯誤,返回false;
  備注:
  */
  private function _checkCatID($CatID)
  {
    if (intval($CatID)) {
      return true;
    } else {
      $this->error = "參數分類ID為空或者無效!";
      return false;
    }
  }
  /*
  功能:查詢路徑;
  屬性:private;
  參數:分類參數$CatID,整型。
  返回:出錯返回false;
  備注:需要TP支持
  */
  private function _searchPath($CatID)
  {
    //檢查參數
    if (!$this->_checkCatID($CatID))
      return false;
    //初始化對象,查找上級Id;
    $rs = $this->model->find($CatID);
    //保存結果
    $this->formatList[] = $rs;
    $this->_searchPath($rs[$this->field['pid']]);
  }
  /*
  功能:查詢給定分類id的路徑;
  屬性:public;
  參數:分類參數$CatID,整型。
  返回:數組;
  備注:需要TP支持
  */
  public function getPath($CatID)
  {
    unset($this->rawList);
    unset($this->formatList);
    //查詢分類路徑
    $this->_searchPath($CatID);
    return array_reverse($this->formatList);
  }
  /*   * **************************************以下為分類添加、修改、刪除*************************************************** */
  /*
  功能:添加分類;
  屬性:public;
  參數:$data,一維數組,要添加的數據,$data需要包含上級分類ID。
  返回:添加成功,返回相應的分類ID,添加失敗,返回FALSE;
  備注:需要TP支持
  */
  public function add($data)
  {
    if (empty($data))
      return false;
    return $this->model->data($data)->add();
  }
  /*
  功能:修改分類;
  屬性:public;
  參數:$data,一維數組,傳遞編輯的數據,$data需要包含要修改的分類ID。
  返回:修改成功,返回相應的分類ID,修改失敗,返回FALSE;
  備注:需要TP支持
  */
  public function edit($data)
  {
    if (empty($data))
      return false;
    return $this->model->data($data)->save();
  }
  /*
  功能:刪除分類;
  屬性:public;
  參數:分類ID
  返回:刪除成功,返回相應的分類ID,刪除失敗,返回FALSE;
  備注:需要TP支持
  */
  public function del($CatID)
  {
    $CatID = intval($CatID);
    if (empty($CatID))
      return false;
    $conditon[$this->field['id']] = $CatID;
    return $this->model->where($conditon)->delete();
  }
}

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一区二区三区国产视频 | 美女主播精品视频一二三四 | 在线日本中文字幕 | 日韩在线中文字幕 | 亚洲精品久久久久久下一站 | 成人精品| 国产精品一区二区三区四区 | 亚洲网站视频 | 看日韩毛片 | 天天色天天射天天操 | 国产a在亚洲线播放 | 亚洲国产精品一区二区久久 | 亚洲精品乱码久久久久久麻豆不卡 | 国产精品久久久久久久久久久久午夜片 | 国产韩国精品一区二区三区 | 欧美透逼| 国产这里只有精品 | h成人在线 | 免费日韩| 国产精品九九九 | 曰批免费视频播放免费 | 国产成人综合av | 欧洲国产一区 | 欧洲一区二区三区 | 蜜臀网| 成人欧美一区二区三区色青冈 | 3d动漫精品一区二区三区 | www午夜 | 午夜免费电影 | 免费成人在线观看视频 | 日韩高清在线一区 | 成年黄色网| 国产精品爱久久久久久久 | 九九人人 | 久久精品中文字幕大胸 | 糈精国产xxxx在线观看 | 一区二区三区久久 | 亚洲精品影视 | 毛片一级网站 | 香蕉视频成人在线观看 | 久久精品综合 |