php 類分開寫,自己前幾天寫的無限分類類_PHP教程

自己前幾天寫的無限分類類_PHP教程

前一周寫的吧,使用中效果還不錯。

主要思想來自:http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/read.php?49][/url]

這里就不多解釋原理了,直接發代碼。

PS:這里代碼是不能直接使用的,必須結合我的一些其他庫類。應該說思想才是最重要的,這里主要提供一種分類的思路。

代碼如下:

/**

--

-- 表的結構 `daxue8_category`

--

CREATE TABLE `daxue8_category` (

`cid` smallint(6) NOT NULL auto_increment,

`pid` smallint(6) NOT NULL default '0',

`level` smallint(6) NOT NULL default '0',

`cname` char(64) NOT NULL default '',

`lft` smallint(6) NOT NULL default '0',

`rgt` smallint(6) NOT NULL default '0',

`uid` mediumint(8) NOT NULL default '0',

`username` char(32) NOT NULL default '',

`ctime` int(10) NOT NULL default '0',

`cstate` tinyint(1) NOT NULL default '0',

`gnum` mediumint(8) NOT NULL default '0',

`orderstyle` smallint(3) NOT NULL default '0',

PRIMARY KEY (`cid`)

) TYPE=MyISAM AUTO_INCREMENT=2 ;

--

-- 導出表中的數據 `daxue8_category`

--

INSERT INTO `daxue8_category` VALUES (1, 0, 1, 'root', 1, 2, 0, '管理員', 1163608814, 1, 0, 0);

*/

class category

{

var $module;

var $tbname;

function category()

{

$this->tbname=TB_PREX.'_category';

$this->module=new module($this->tbname);

}

/**

* 增加子節點

* @param array $node 待增加子節點的屬性

* @param int $pid 父節點的ID

*/

function add($node,$pid){

//檢查是否已經存在該節點

if($node_exist=$this->module->detail('where pid='.$pid.' and cname=\''.$node['cname'].'\'')){

//$this->error(__FUNCTION__.'():該節點'.$node['cname'].'已經存在!');

//print_r($node_exist);

return $node_exist['cid'];

}

//獲取父節點信息

$pnode=$this->get_by_cid($pid);

//更新其他節點

$this->module->query('update `'.$this->tbname.'` set lft=lft+2 where lft>'.$pnode['rgt']);

$this->module->query('update `'.$this->tbname.'` set rgt=rgt+2 where rgt>='.$pnode['rgt']);

//插入新節點

$node['pid']=$pid;

$node['lft']=$pnode['rgt'];

$node['rgt']=$pnode['rgt']+1;

$node['level']=$pnode['level']+1;//層次加一

return $this->module->add($node);

}

/**

* 刪除節點

* @param $cid 待刪除的節點的ID

* @param $delete_childern 如果該節點存在子節點,是否強制刪除。設置未true,則當存在子節點的時候,刪除失敗,返回false

*

*/

function delete($cid,$delete_childern=false)

{

//獲取節點信息

$node=$this->get_by_cid($cid);

if(($this->child_num($node)>0)&&(!$delete_childern))$this->error(__FUNCTION__.'():該節點存在子節點!');

//刪除該節點及其所有子節點

$this->module->delete('where lft between '.$node['lft'].' and '.$node['rgt']);

//修改相應的左右鍵值

$plus=$node['rgt']-$node['lft']+1;

$this->module->query('update `'.$this->tbname.'` set lft=lft-'.$plus.' where lft>'.$node['rgt']);

$this->module->query('update `'.$this->tbname.'` set rgt=rgt-'.$plus.' where rgt>'.$node['rgt']);

return true;

}

/**

* 更新一個節點

* @param array $set更新集

* @param int $cid 更新的節點的主鍵ID

*/

function update($set,$cid){

return $this->module->update($set,'where cid='.$cid);

}

/**

* 選取節點及其子節點

* @param int $cid節點的主鍵ID

* @param int $deep選取深度

*/

function select($cid,$deep=0)

{

//獲取節點信息

$node=$this->get_by_cid($cid);

$where='where lft between '.$node['lft'].' and '.$node['rgt'];

if(!empty($deep))$where.=' and level if($deep==1){

$where.=' order by orderstyle desc';

}else{

$where.=' order by lft asc';

}

return $this->module->select($where);

}

/**

* 獲取父節點路徑

* @param int $cid 節點的ID

*/

function get_parent($cid)

{

$node=$this->get_by_cid($cid);

return $this->module->select('where lft<='.$node['lft'].' and rgt>='.$node['rgt'].' order by lft asc');

}

/**

* 選取子節點

* @param int $cid節點的主鍵ID

* @param int $deep選取深度

*/

function get_children($pid,$deep=0){

//獲取節點信息

$pnode=$this->get_by_cid($pid);

$where='where lft>'.$pnode['lft'].' and rgt if(!empty($deep))$where.=' and level<='.($pnode['level']+$deep);

if($deep==1){

$where.=' order by orderstyle desc';

}else{

$where.=' order by lft asc';

}

return $this->module->select($where);

}

/**

* 獲取第deep層子節點

* @param int $cid節點的主鍵ID

* @param int $deep選取深度

*/

function get_level_children($pid,$deep){

//獲取節點信息

$pnode=$this->get_by_cid($pid);

$where='where lft>'.$pnode['lft'].' and rgt $where.=' and level='.($pnode['level']+$deep);

$where.=' order by orderstyle desc';

return $this->module->select($where);

}

/**

* 獲取節點信息

* @param $cid 節點的主鍵ID

* @return array $node

*/

function get_by_cid($cid){

$node=$this->module->detail('where cid='.$cid);

if(!$node)$this->error(__FUNCTION__.'():獲取節點'.$cid.'失敗!');

return $node;

}

/**

* 獲取子節點的數目

* @param array $node 節點信息

* @return num

*/

function child_num($node){

return ($node['rgt']-$node['lft']-1)/2;

}

/**

* 按照層次顯示分類

* @param int $cid節點的主鍵ID

* @output

*/

function display($cid)

{

$nodes=$this->select($cid);

foreach($nodes as $node){

echo str_repeat(' ',$node['level']-1).$node['cname']."\n";

}

}

/*-------private-----------------------------------*/

function error($msg){

die('ERROR : file '.__FILE__.' function '.$msg);

}

}

?>

http://www.bkjia.com/PHPjc/317731.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/317731.htmlTechArticle前一周寫的吧,使用中效果還不錯。 主要思想來自:http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/read.php?49][/url] 這里就不多解釋原理了...

本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴

本文系統來源:php中文網

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php創建表設置編碼,教您在Zend Framework里如何設置數據庫編碼以及怎樣給數據表設定前綴!...

當我們在開發項目時..大家都會遇到一個問題就是:數據庫的編碼問題.當然我們不用Zend Framework做為項目開發的框架時..我們可以很快,很容易搞定這個小問題..但是當我們要使用Zend Framewok開發項目時..我們可能一時會不知道如何解決這個小問題..比如我就是這樣的人..在開發這個…

python 怎么將數組轉為列表_怎么將視頻轉為GIF動態圖 表情包怎么制作

說到GIF&#xff0c;大家應該都不陌生了吧&#xff01;尤其是在聊天中使用較多&#xff0c;似乎一言不合就開啟了斗圖模式&#xff0c;但是我們平時使用的GIF一般都是軟件中自帶的&#xff0c;其實自己制作也是很方便的&#xff0c;而且會發現很有趣&#xff0c;不但可以直接錄…

curl php 百度,php curl 模擬登錄百度主頁

php curl 模擬登錄百度首頁本帖最后由 STONEWP 于 2012-03-29 13:43:04 編輯代碼如下&#xff1a;$url "https://passport.baidu.com/?login&tplmn";//$url "http://www.baidu.com/";$cookdir "d:/www/html/mndl/cookie.txt";$ch curl_…

proteus里面沒有stm32怎么辦_嵌入式單片機之stm32串口你懂了多少!!

stm32作為現在嵌入式物聯網單片機行業中經常要用多的技術&#xff0c;相信大家都有所接觸&#xff0c;今天這篇就給大家詳細的分析下有關于stm32的出口&#xff0c;還不是很清楚的朋友要注意看看了哦&#xff0c;在最后還會為大家分享有些關于stm32的視頻資料便于學習參考。點擊…

tomcat不能解析php,tomcat不支持php怎么辦

tomcat不支持php的解決辦法&#xff1a;首先將“PHP/Java Bridge”下的相關文件復制到tomcat的lib目錄下&#xff1b;然后修改tomcat安裝目錄下conf文件夾里的“web.xml”文件&#xff1b;最后重啟tomcat即可。java開發者都知道&#xff0c;tomcat是用來部署java web項目的。這…

c++ dicom圖像切割_【高訓智造】原創專業課堂第225期--定位滑座的線切割加工

原標題&#xff1a;【高訓智造】原創專業課堂第225期--定位滑座的線切割加工歡迎來到【高訓智造】原創專業課堂第225期&#xff0c;本期由郭沃沛老師給大家帶來線切割小課堂。定位滑座的線切割加工郭沃沛1零件圖如圖1所示為定位滑座零件圖&#xff0c;其材料為45鋼&#xff0c;…

php.ini配置詳解 號,php INI配置文件的解析實現分析

我不知道怎么說才好&#xff0c;因為我在讀INI文件的時候&#xff0c;往往都是用現成的函數&#xff1a;parse_ini_file或者是parse_ini_string&#xff0c;但怎么寫入&#xff0c;就是另外的方法了(自己實現。。。。)所以看到這篇文章的時候&#xff0c;我也才剛剛知道&#x…

c iostream.源碼_通達信指標公式源碼精準買賣主圖指標公式免費分享

V0:EMA(C,5),COLOR00FF66;V1:EMA(C,10),COLOR00FF66;V2:EMA(C,15),LINETHICK2,COLORFFFFFF;V3:EMA(C,30);V4:EMA(C,60),COLOR3366FF;年線:EMA(C,90),COLORBLUE;M1:1000*V1/V4<1015 AND 1000*V1/V4>975;M2:1000*V2/V4<1020 AND 1000*V2/V4>980;M3:1000*V3/V4<101…

4am永遠 鼠標按鍵設置_4AM稱霸PCL和PEL 絕地求生與和平精英的雙端冠軍 | 電玩巴士...

在《絕地求生》PCL秋季賽&#xff0c;4AM高分碾壓全場斬獲冠軍&#xff1b;在手游和平精英PEL聯賽上4AM戰隊再度重拳出擊榮獲S3總冠軍。在同一時間&#xff0c;4AM戰隊實現了端游與手游雙冠王的神跡&#xff01;要說國內第一大逃殺電競俱樂部&#xff0c;4am自認第二&#xff0…

checkA.php,php window平臺模擬checkdnsrr函數檢測_php

在php的系統函數中有一個checkdnsrr函數&#xff0c;該函數的作用是根據一個給定的host name(域名)或者IP地址檢查它是否有DNS記錄&#xff0c;目的就是檢驗它是否真實存在。但是該函數僅可以在linux系統下使用&#xff0c;并不支持windows平臺。下面是網上搜集到的一個hack的方…

oracle臨時表經常被鎖_【趙強老師】Oracle數據庫的存儲結構

Oracle的存儲結構分為&#xff1a;物理存儲結構和邏輯存儲結構。一、物理存儲結構&#xff1a;指硬盤上存在的文件數據文件(data file)一個數據庫可以由多個數據文件組成的&#xff0c;數據文件是真正存放數據庫數據的。一個數據文件就是一個操作系統文件。數據庫的對象(表和索…

php頁面的循環輸出數組,PHP抓取頁面上的數組 并循環輸出 急

PHP抓取頁面上的數組 并循環輸出 急 在線等我用file_get_contents()抓取了 這個網址上的內容http://simonfenci.sinaapp.com/index.php?keysimon&wd1314abc看似好像反回的是數組。。但是我不管怎么用foreach循環都報錯。。我只想把數組中的word里面的值 取出來。。誰幫幫我…

h5 nan_手把手教你將H5游戲打包成快游戲

H5游戲可以通過快應用的web組件快速打包成快游戲&#xff0c;打包上架后的快游戲&#xff0c;只要原H5游戲的url不發生變動&#xff0c;快游戲就不需要做更新&#xff0c;維護工作量小。使用快應用IDE&#xff0c;打包快游戲的操作很簡單。訪問官網安裝開發工具&#xff0c;在P…

php 構造函數 返回值,php構造函數與析構函數實例分析

本節內容&#xff1a;php構造函數與析構函數例子&#xff1a;復制代碼 代碼示例:class Person{public $name;public $age;public function __construct($name,$age){$this->name $name;$this->age $age;}function __destruct(){echo $this->name."銷毀資源&…

平板電腦有什么用_除了蓋泡面,平板電腦沒什么用了

平板電腦似乎變成一個雞肋&#xff0c;逐漸沒有多少人買了。就算擁有&#xff0c;抱在懷里把玩的機會少了&#xff0c;躺在角落吃灰的時候多了。曾經&#xff0c;沒有人能拒絕平板電腦的誘惑。有了平板&#xff0c;你仿佛躋身上流社會。不經意間拿出時的從容&#xff0c;打開皮…

java程序面向對象show,20165309 實驗二 Java面向對象程序設計

2017-2018-2 20165309實驗二《Java面向對象程序設計》實驗報告一、實驗內容1. 初步掌握單元測試和TDD2. 理解并掌握面向對象三要素&#xff1a;封裝、繼承、多態3. 初步掌握UML建模4. 熟悉S.O.L.I.D原則5. 了解設計模式二、實驗步驟(一)單元測試1.三種代碼&#xff1a;偽代碼、…

php dom 丟失內容,PHP DOMDocument缺失

我在運行$dom new DOMDocument(“1.0”,“utf-8”)時遇到一個奇怪的錯誤&#xff1a;警告&#xff1a;require_once(classes / DOMDocument.class.php)[function.require-once]&#xff1a;無法打開流&#xff1a;第5行的/var/www/html/cms/bootstrap.php中沒有這樣的文件或目…

jade軟件_TEM衍射斑點標定之DM軟件

雖然透射電子顯微鏡(TEM) 能在納米尺度上實現對待測樣品形貌、 尺寸的分析&#xff1b; 結合選區電子衍射(SAED)&#xff0c;可以更進一步實現對待測樣品的晶體結構、 晶相組成的鑒定&#xff0c;從而提高樣品分析的準確度和可靠性。可是&#xff0c;每個剛接觸TEM的小白&#…

dorado 7 怎么樣_一點點奶茶怎么樣?消費者眼中的網紅奶茶

最近在朋友圈, -款奶茶火速躥紅,不錯,那正是近期瘋傳的網紅奶茶一點點奶茶。一點點奶茶是-款主打臺灣正宗波霸奶茶的茶飲品牌,而這樣的奶茶在現在的市場中就表現的十分有潛力, 尤其受年輕群體的喜歡!一點點奶茶怎么樣?它的崛起是無可厚非的,它那美麗的外形,別具-格的屬性&…

Mysql 啟動失敗沒日志,MySQL Server 5.7將無法啟動,并且未填充錯誤日志

我最近在Ubuntu 14.04上安裝了MySQL Server 5.7(通過ansible使用this role是具體的).首次安裝時啟動很好,但是當我嘗試重新啟動它時,它會永遠掛起&#xff1a;sudo service mysql restart* Stopping MySQL Community Server 5.7.13* MySQL Community Server 5.7.13 is already …