分頁了還怎么顯示樹狀?能顯示 但是很難看 ,看不出效果了,我寫后臺(tái)菜單管理從來不分頁,phpcmsV9 ?也沒有分頁 。我推薦使用 ? tree.class.php ?phpcmsV9 的一個(gè)擴(kuò)展類文件,可以看看怎么使用。如圖 ?我就是直接顯示的:
在新津縣等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),新津縣網(wǎng)站建設(shè)費(fèi)用合理。
打開數(shù)據(jù)庫那就不寫了。
前幾天剛寫了一個(gè)。你看下
/* 表結(jié)構(gòu)
CREATE TABLE `lh_categroy` (
`id` int(10) NOT NULL auto_increment,
`parentid` int(6) NOT NULL,
`name` varchar(255) NOT NULL,
`keyword` varchar(255) NOT NULL COMMENT '關(guān)鍵字',
`des` varchar(255) NOT NULL COMMENT '描述',
PRIMARY KEY ?(`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;
*/
/**
* 獲得所有欄目排序后的列表
* @return array
*/
function getAllOrderColumns($id = 0) {
global $columns;
$result = array();
if ($id) $result[$id] = $columns[$id];
foreach ($columns as $column) {
if ($column['parentid'] == $id) {
$column['level'] = 0;
$result[$column['id']] = $column;
getColumns($columns, $column['id'], $result, 1);
}
}
return $result;
}
function getColumns($columns, $cid, $result, $l = 1) {
foreach ($columns as $c) {
if ($c['parentid'] == $cid) {
$c['level'] = $l;
$result[$c['id']] = $c;
getColumns($columns, $c['id'], $result, $l + 1);
}
}
}
$sql = 'select * from lh_categroy';
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)){
$columns[]=$row;
}
$fenlei = '';
$fenlei = ?'select name="cid" style="width:200px; height:25px;"
option value="0"請(qǐng)選擇分類/option';
foreach(getAllOrderColumns() as $v){
$v[name] = $v[level] ? ($v[level]==1 ? 'nbsp;nbsp;|-'.$v[name]:'nbsp;nbsp;nbsp;|-'.$v[name]) : $v[name];
$fenlei .= "option value='$v[id]'$v[name]/option";
}
$fenlei .= '/select';
echo $fenlei;
$arr = [
['cid'=1,'name'=1,'pid'=0],
['cid'=2,'name'=2,'pid'=1],
['cid'=3,'name'=3,'pid'=2],
['cid'=4,'name'=4,'pid'=0],
['cid'=5,'name'=5,'pid'=4],
['cid'=6,'name'=6,'pid'=4],
['cid'=7,'name'=7,'pid'=5],
['cid'=8,'name'=8,'pid'=5],
];
$re = GetTree($arr);
print_r($re);
function GetTree($arr,$pid = 0,$re = []){
foreach($arr as $key=$val) {
if($val['pid'] == $pid) {
$val['sub'] = GetTree($arr , $val['cid']);
$re[] = $val;
}
}
return $re;
}
數(shù)據(jù)庫設(shè)計(jì)的時(shí)候,通常的做法是用父ID來解決樹狀結(jié)構(gòu),也有二叉樹等等
id ?pid category_name
然后,用遞歸就能實(shí)現(xiàn),也有引用數(shù)組的方式
?php
/**
*?此方法由@Tonton?提供
*?
*?@date?2012-12-12?
*/
function?genTree5($items)?{?
foreach?($items?as?$item)?
$items[$item['pid']]['son'][$item['id']]?=?$items[$item['id']];?
return?isset($items[0]['son'])???$items[0]['son']?:?array();?
}?
/**
*?將數(shù)據(jù)格式化成樹形結(jié)構(gòu)
*?@author?Xuefen.Tong
*?@param?array?$items
*?@return?array?
*/
function?genTree9($items)?{
$tree?=?array();?//格式化好的樹
foreach?($items?as?$item)
if?(isset($items[$item['pid']]))
$items[$item['pid']]['son'][]?=?$items[$item['id']];
else
$tree[]?=?$items[$item['id']];
return?$tree;
}
$items?=?array(
1?=?array('id'?=?1,?'pid'?=?0,?'name'?=?'江西省'),
2?=?array('id'?=?2,?'pid'?=?0,?'name'?=?'黑龍江省'),
3?=?array('id'?=?3,?'pid'?=?1,?'name'?=?'南昌市'),
4?=?array('id'?=?4,?'pid'?=?2,?'name'?=?'哈爾濱市'),
5?=?array('id'?=?5,?'pid'?=?2,?'name'?=?'雞西市'),
6?=?array('id'?=?6,?'pid'?=?4,?'name'?=?'香坊區(qū)'),
7?=?array('id'?=?7,?'pid'?=?4,?'name'?=?'南崗區(qū)'),
8?=?array('id'?=?8,?'pid'?=?6,?'name'?=?'和興路'),
9?=?array('id'?=?9,?'pid'?=?7,?'name'?=?'西大直街'),
10?=?array('id'?=?10,?'pid'?=?8,?'name'?=?'東北林業(yè)大學(xué)'),
11?=?array('id'?=?11,?'pid'?=?9,?'name'?=?'哈爾濱工業(yè)大學(xué)'),
12?=?array('id'?=?12,?'pid'?=?8,?'name'?=?'哈爾濱師范大學(xué)'),
13?=?array('id'?=?13,?'pid'?=?1,?'name'?=?'贛州市'),
14?=?array('id'?=?14,?'pid'?=?13,?'name'?=?'贛縣'),
15?=?array('id'?=?15,?'pid'?=?13,?'name'?=?'于都縣'),
16?=?array('id'?=?16,?'pid'?=?14,?'name'?=?'茅店鎮(zhèn)'),
17?=?array('id'?=?17,?'pid'?=?14,?'name'?=?'大田鄉(xiāng)'),
18?=?array('id'?=?18,?'pid'?=?16,?'name'?=?'義源村'),
19?=?array('id'?=?19,?'pid'?=?16,?'name'?=?'上壩村'),
);
echo?"pre";
print_r(genTree5($items));
print_r(genTree9($items));
?
一般這種問題需要使用嵌套函數(shù),PHP也是支持嵌套函數(shù)的,就是不停的調(diào)用自身,直到符合條件后退出函數(shù)循環(huán),這樣就能找出它所有的父級(jí)了,在c語言的時(shí)候也學(xué)過,理解起來還是比較容易的。