php無限分類大致有三種方式,
1、數據庫通過設置父類ID來進行唯一索引,然后使用函數的遞歸調用實現無限分類;
2、數據庫設計通過特定格式進行排列,然后使用mysql查詢關鍵函數:concat。程序實現比較簡單;
3、第三種不是太了解, 好像要使用到算法和數據結構進行排列。
今天我主要分享下第二種方式,一開始也是找了很多資料,確實比較難理解。不過最終還是給搞明白了,因此記下隨筆,希望通過這篇文章能夠幫助到大家。
一、數據庫設計:
復制代碼 代碼如下:
 
-- 
-- 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', '網站首頁'), 
(2, '0-1', 'Linux OS'), 
(3, '0-1', 'Apache服務器'), 
(4, '0-1', 'MySQL數據庫'), 
(5, '0-1', 'PHP腳本語言'), 
(6, '0-1-2', 'Linux 系統教程'), 
(7, '0-1-2', 'Linux 網絡技術'), 
(8, '0-1-2', 'Linux 安全基礎'), 
(9, '0-1-2-7', 'Linux LAMP'), 
(10, '0-1-3-10', 'apache Server'); 
復制代碼 代碼如下:
 
$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>' . $option . '</select>'; 
上效果圖:
這里有幾個關鍵的地方需要注意下:
 1、在數據庫查詢字段是用了concat函數,不了解的地方可以google下。 
 2、第二個地方主要是用到了php中的str_repeat巧妙的設置了空格。
有錯誤之處,望mail: chenghuiyong1987@gmail.com或者留言
新聞熱點
疑難解答