PHP 無(wú)限分類三種方式 非函數(shù)的遞歸調(diào)用!
php無(wú)限分類大致有三種方式,
1、數(shù)據(jù)庫(kù)通過(guò)設(shè)置父類ID來(lái)進(jìn)行唯一索引,然后使用函數(shù)的遞歸調(diào)用實(shí)現(xiàn)無(wú)限分類;
2、數(shù)據(jù)庫(kù)設(shè)計(jì)通過(guò)特定格式進(jìn)行排列,然后使用mysql查詢關(guān)鍵函數(shù):concat。程序?qū)崿F(xiàn)比較簡(jiǎn)單;
3、第三種不是太了解, 好像要使用到算法和數(shù)據(jù)結(jié)構(gòu)進(jìn)行排列。
今天我主要分享下第二種方式,一開(kāi)始也是找了很多資料,確實(shí)比較難理解。不過(guò)最終還是給搞明白了,因此記下隨筆,希望通過(guò)這篇文章能夠幫助到大家。
一、數(shù)據(jù)庫(kù)設(shè)計(jì):

--
-- Table structure for table `category`
--
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catpath` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `category`
--
INSERT INTO `category` (`id`, `catpath`, `name`) VALUES
(1, '0', '網(wǎng)站首頁(yè)'),
(2, '0-1', 'Linux OS'),
(3, '0-1', 'Apache服務(wù)器'),
(4, '0-1', 'MySQL數(shù)據(jù)庫(kù)'),
(5, '0-1', 'PHP腳本語(yǔ)言'),
(6, '0-1-2', 'Linux 系統(tǒng)教程'),
(7, '0-1-2', 'Linux 網(wǎng)絡(luò)技術(shù)'),
(8, '0-1-2', 'Linux 安全基礎(chǔ)'),
(9, '0-1-2-7', 'Linux LAMP'),
(10, '0-1-3-10', 'apache Server');
這里說(shuō)明下,catpath的-鏈接符號(hào)不是固定的,可以選擇,;等特殊符號(hào)。
二、 PHP代碼實(shí)現(xiàn):
$conn = mysql_connect ( 'localhost', 'root', '' );
mysql_select_db ( 'test', $conn );
mysql_query ( 'set names UTF8' );
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
$query = mysql_query ( $sql );
while ( $row = mysql_fetch_array ( $query ) ) {
/**
* 第一種展示方法
*/
/*$space = str_repeat ( ' ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
echo $space . $row ['name'] . '<br>';*/
/**
* 第二種展示方法
*/
$space = str_repeat ( ' ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
$option .= '<option value="' . $row ['id'] . '">' . $space . $row ['name'] . '</option>';
}
echo '<select name="opt">' . $option . '</select>';
上效果圖:
這里有幾個(gè)關(guān)鍵的地方需要注意下:
1、在數(shù)據(jù)庫(kù)查詢字段是用了concat函數(shù),不了解的地方可以google下。
2、第二個(gè)地方主要是用到了php中的str_repeat巧妙的設(shè)置了空格。
有錯(cuò)誤之處,望mail: chenghuiyong1987@gmail.com或者留言
- PHP遞歸的三種常用方式
- php遞歸函數(shù)三種實(shí)現(xiàn)方法及如何實(shí)現(xiàn)數(shù)字累加
- php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法
- PHP遞歸算法的簡(jiǎn)單實(shí)例
- PHP基于遞歸算法解決兔子生兔子問(wèn)題
- PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹(shù)操作示例
- PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
- PHP實(shí)現(xiàn)字符串翻轉(zhuǎn)功能的方法【遞歸與循環(huán)算法】
- PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法示例
- PHP使用遞歸算法無(wú)限遍歷數(shù)組示例
- php獲得文件夾下所有文件的遞歸算法的簡(jiǎn)單實(shí)例
- PHP二分查找算法示例【遞歸與非遞歸方法】
- PHP冒泡算法詳解(遞歸實(shí)現(xiàn))
- 關(guān)于PHP遞歸算法和應(yīng)用方法介紹
- PHP遞歸算法的詳細(xì)示例分析
- php全排列遞歸算法代碼
- php實(shí)現(xiàn)遞歸的三種基本方式
相關(guān)文章
PHP常見(jiàn)的序列化與反序列化操作實(shí)例分析
這篇文章主要介紹了PHP常見(jiàn)的序列化與反序列化操作,結(jié)合實(shí)例形式分析了php使用serialize()及unserialize()進(jìn)行序列化與反序列化相關(guān)操作技巧及注意事項(xiàng),需要的朋友可以參考下2019-10-10
PHP zlib擴(kuò)展實(shí)現(xiàn)頁(yè)面GZIP壓縮輸出
GZIP(GNU-ZIP)是一種壓縮技術(shù)。經(jīng)過(guò)GZIP壓縮后頁(yè)面大小可以變?yōu)樵瓉?lái)的30%甚至更小。這樣用戶瀏覽的時(shí)候就會(huì)感覺(jué)很爽很愉快!2010-06-06
php刪除txt文件指定行及按行讀取txt文檔數(shù)據(jù)的方法
這篇文章主要介紹了php刪除txt文件指定行及按行讀取txt文檔數(shù)據(jù)的方法,涉及php針對(duì)txt文件的按行讀取、刪除等操作技巧,需要的朋友可以參考下2017-01-01
談?wù)凱HP連接Access數(shù)據(jù)庫(kù)的注意事項(xiàng)
有的時(shí)候需要用php連接access數(shù)據(jù)庫(kù),結(jié)果整了半天Access數(shù)據(jù)庫(kù)就是連接不上,查找很多資料,以下是些個(gè)人經(jīng)驗(yàn),希望能給需要連接access 數(shù)據(jù)的人帶來(lái)幫助。2016-08-08
php代碼架構(gòu)的八點(diǎn)注意事項(xiàng)
這篇文章主要介紹了php代碼架構(gòu)的八點(diǎn)注意事項(xiàng),較為全面的分析總結(jié)了基于面向?qū)ο蟪绦蛟O(shè)計(jì)的代碼架構(gòu)設(shè)計(jì)問(wèn)題相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01
推薦學(xué)習(xí)php sesson的朋友必看PHP會(huì)話(Session)使用入門
對(duì)比起 Cookie,Session 是存儲(chǔ)在服務(wù)器端的會(huì)話,相對(duì)安全,并且不像 Cookie 那樣有存儲(chǔ)長(zhǎng)度限制,本文簡(jiǎn)單介紹 Session 的使用。2008-08-08
ThinkPHP Where 條件中常用表達(dá)式示例(詳解)
下面小編就為大家?guī)?lái)一篇ThinkPHP Where 條件中常用表達(dá)式示例(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03

