$f=array();
$list=array();
$db->query("select * from test order by parent_id");
while($rs=$db->fetch()){
$f[$rs['id']]['name']=$rs['name'];
if(!$rs['parent_id']){
$list[]=&$f[$rs['id']];
}else{
$f[$rs['parent_id']]['sub'][$rs['id']]=&$f[$rs['id']];
}
}
function show($list,$tab='')
{
if(!is_array($list)){
echo $list;
return;
}
foreach($list as $k=>$v){
echo $tab."⊥".$v['name']."<br>";
show($v['sub'],$tab." ");
}
}
show($list);
$list=array();
$db->query("select * from test order by parent_id");
while($rs=$db->fetch()){
$f[$rs['id']]['name']=$rs['name'];
if(!$rs['parent_id']){
$list[]=&$f[$rs['id']];
}else{
$f[$rs['parent_id']]['sub'][$rs['id']]=&$f[$rs['id']];
}
}
function show($list,$tab='')
{
if(!is_array($list)){
echo $list;
return;
}
foreach($list as $k=>$v){
echo $tab."⊥".$v['name']."<br>";
show($v['sub'],$tab." ");
}
}
show($list);
1 0 新闻
2 1 国内
3 1 国外
4 1 大陆
5 0 笑话
6 5 子栏目
7 5 子栏目
8 7 子栏目的子栏目
9 7 子栏目的子栏目
10 7 子栏目的子栏目先说下表的设计,其中表的父id为0的表示为最顶级的分类(或者节点),id为自动.
<?php
$list=array();
$sub=array();/*子类显示的函数
$array = 显示数组
$index = 索引
$sub_char = 子分类的装饰字符 ⊥
$split_char = 分隔符 这里是tab(8个空格)
*/
function show_list($array, $index, $sub_char, $split_char = "\t") {
static $s = 1;
if(is_array($array[$index])) {
foreach($array[$index] as $class) {
echo str_repeat($split_char, $s).$sub_char.$class['classname']."\n";
if(is_array($array[$class['id']])) {
$s++;
show_list($array, $class['id'], $sub_char, $split_char);
}
}
}
if($s > 1) $s--;
}mysql_connect('localhost', 'test', '') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
mysql_query("set names 'gbk'");
$result = mysql_query("select * from test order by id");
while($rs = mysql_fetch_array($result, MYSQL_ASSOC)) {
if($rs['parentid'] == 0) {
$list[] = $rs; //保存顶级分类
} else {
$sub[$rs['parentid']][] = $rs; //子分类
}
}echo '<pre>';
if(is_array($list)) {
foreach($list as $class) {
echo '-'.$class['classname']."\n";
show_list($sub, $class['id'], '⊥');
}
}
echo '</pre>'