PHP 無限分類三種方式 非函數(shù)的遞歸調(diào)用!
php無限分類大致有三種方式,
1、數(shù)據(jù)庫通過設(shè)置父類ID來進(jìn)行唯一索引,然后使用函數(shù)的遞歸調(diào)用實現(xiàn)無限分類;
2、數(shù)據(jù)庫設(shè)計通過特定格式進(jìn)行排列,然后使用mysql查詢關(guān)鍵函數(shù):concat。程序?qū)崿F(xiàn)比較簡單;
3、第三種不是太了解, 好像要使用到算法和數(shù)據(jù)結(jié)構(gòu)進(jìn)行排列。
今天我主要分享下第二種方式,一開始也是找了很多資料,確實比較難理解。不過最終還是給搞明白了,因此記下隨筆,希望通過這篇文章能夠幫助到大家。
一、數(shù)據(jù)庫設(shè)計:
--
-- 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)站首頁'),
(2, '0-1', 'Linux OS'),
(3, '0-1', 'Apache服務(wù)器'),
(4, '0-1', 'MySQL數(shù)據(jù)庫'),
(5, '0-1', 'PHP腳本語言'),
(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');
這里說明下,catpath的-鏈接符號不是固定的,可以選擇,;等特殊符號。
二、 PHP代碼實現(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>';
上效果圖:
這里有幾個關(guān)鍵的地方需要注意下:
1、在數(shù)據(jù)庫查詢字段是用了concat函數(shù),不了解的地方可以google下。
2、第二個地方主要是用到了php中的str_repeat巧妙的設(shè)置了空格。
有錯誤之處,望mail: chenghuiyong1987@gmail.com或者留言
- PHP遞歸的三種常用方式
- php遞歸函數(shù)三種實現(xiàn)方法及如何實現(xiàn)數(shù)字累加
- php菜單/評論數(shù)據(jù)遞歸分級算法的實現(xiàn)方法
- PHP遞歸算法的簡單實例
- PHP基于遞歸算法解決兔子生兔子問題
- PHP基于非遞歸算法實現(xiàn)先序、中序及后序遍歷二叉樹操作示例
- PHP基于二分法實現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
- PHP實現(xiàn)字符串翻轉(zhuǎn)功能的方法【遞歸與循環(huán)算法】
- PHP基于遞歸實現(xiàn)的約瑟夫環(huán)算法示例
- PHP使用遞歸算法無限遍歷數(shù)組示例
- php獲得文件夾下所有文件的遞歸算法的簡單實例
- PHP二分查找算法示例【遞歸與非遞歸方法】
- PHP冒泡算法詳解(遞歸實現(xiàn))
- 關(guān)于PHP遞歸算法和應(yīng)用方法介紹
- PHP遞歸算法的詳細(xì)示例分析
- php全排列遞歸算法代碼
- php實現(xiàn)遞歸的三種基本方式
相關(guān)文章
詳解PHP執(zhí)行定時任務(wù)的實現(xiàn)思路
這篇文章主要介紹了詳解PHP執(zhí)行定時任務(wù)的幾種實現(xiàn)思路,PHP的定時任務(wù)功能必須通過和其他工具結(jié)合才能實現(xiàn),們就來深入的解析幾種常見的php定時任務(wù)的思路2015-12-12PHP中實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析
中文字符編碼研究系列第四期,PHP實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析,主要討論中文漢字轉(zhuǎn)換為十進(jìn)制和十六進(jìn)制的方法,并掌握轉(zhuǎn)換原理應(yīng)用于實際開發(fā)。本文以GBK編碼字符為例,討論GBK編碼的字符轉(zhuǎn)換原理2011-12-12PHP進(jìn)階學(xué)習(xí)之Geo的地圖定位算法詳解
這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之Geo的地圖定位算法,結(jié)合實例形式詳細(xì)分析了php Geo的地圖定位算法相關(guān)概念、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2019-06-06PHP遠(yuǎn)程連接MYSQL數(shù)據(jù)庫非常慢的解決方法
如果一個問題出現(xiàn)兩次,那么這個問題就值得去研究下了,上次客戶說MYSQL數(shù)據(jù)庫很慢,我還在想,不會是PHP的問題吧?2008-07-07用php的ob_start來生成靜態(tài)頁面的方法分析
php下利用ob_start來生成靜態(tài)頁面的方法,需要生成靜態(tài)的朋友可以參考下。2011-03-03