PHP無制限クラス分類

6712 ワード

Layout:post title:[PHP無限レベル分類]date:2016-04-29 09:36:19+0800 comments:true categories:[HP]
PHP無制限クラス分類は主に2つの実現方式があり、再帰と全経路で実現する.
一、再帰実現

ID
pid
catename
cateorder
createtime
1
0
ニュース
0
0
2
0
画像
0
0
3
1
国内ニュース
0
0
4
1
国際ニュース
0
0
5
3
北京ニュース
0
0
6
4
アメリカニュース
0
0
7
2
ビューティ
0
0
8
2
風景写真
0
0
create table deepcate
(
id int(10) unsigned not null  auto_increment primary key,
pid int(11) unsigned    not null,
catename    varchar(30) not null,
cateorder   int(11) unsigned    default 0,
createtime  int(10) not null
);

insert into deepcate(pid,catename,cateorder,createtime)values(0,'  ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(0,'  ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(1,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(1,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(3,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(4,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(2,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(2,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(7,'    ',0,0);
insert into deepcate(pid,catename,cateorder,createtime)values(9,'  AV',0,0);

select * from deepcate;

phpコード実装
";
    foreach($rs as $v){
        if($v['id']==$selected){
            $selected="selected";
        }
       $str.="";
    }
    return $str.= "";
}

echo displayCate();

echo "

"; function getCatePath($cid,&$result){ $sql="SELECT * FROM deepcate WHERE id=$cid "; $rs=mysql_query($sql); $row=mysql_fetch_assoc($rs); if($row){ $result[]=$row; getCatePath($row['pid'],$result); } krsort($result); return $result; } function displayCatePath($cid,$url="deepcate.php?cid="){ $res=getCatePath($cid,$result); $str=""; foreach($res as $v){ $str.= "{$v['catename']}>>"; }return $str; } echo displayCatePath(10);

二、全経路実現
use imooc;
create table    likecate
(
id  int(11) not null  auto_increment primary key,
path    varchar(200)    not null,
catename    varchar(30) not null,
cateorder   int(11) not null    default 0,
createtime  int(11) not null
);

insert into likecate(path,catename,cateorder,createtime)values('','  ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1','    ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,2','    ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,2','    ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1','    ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,5','andriod  ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,5','ios  ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,5','winphoto  ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,2,4','    ',0,0);
insert into likecate(path,catename,cateorder,createtime)values('1,2,3','    ',0,0);

select * from likecate;

select id,catename,path,concat(path,',',id) as fullpath from likecate where 1 order by fullpath asc;

#      
+----+--------------+-------+----------+
| id | catename     | path  | fullpath |
+----+--------------+-------+----------+
|  1 |            |       | ,1       |
|  2 |          | 1     | 1,2      |
|  3 |          | 1,2   | 1,2,3    |
| 10 |          | 1,2,3 | 1,2,3,10 |
|  4 |          | 1,2   | 1,2,4    |
|  9 |          | 1,2,4 | 1,2,4,9  |
|  5 |          | 1     | 1,5      |
|  6 | andriod    | 1,5   | 1,5,6    |
|  7 | ios        | 1,5   | 1,5,7    |
|  8 | winphoto   | 1,5   | 1,5,8    |
+----+--------------+-------+----------+

phpコード実装
";
foreach($res as $v){
    echo "";
}
echo "";
 
echo "

"; function getPathCate($cateid){ $sql="select *,concat(path,',',id)fullpath from likecate where id=$cateid"; $res=mysql_query($sql); $row=mysql_fetch_assoc($res); $ids=$row['fullpath']; $sql="select * from likecate where id in($ids) order by id asc"; $res=mysql_query($sql); $result=array(); while($row=mysql_fetch_assoc($res)){ $result[]=$row; } return $result; } function displayCatePath($cateid,$link='likecate.php?cid='){ $res=getPathCate($cateid); $str=""; foreach($res as $v){ $str.="{$v['catename']}>"; } return $str; } echo displayCatePath(4,'likecate.php?p=1&cid=');