把无限级分类循环出来确实是一件头疼的事情。 比如,我们要循环出一个SELECT,或一个TABLE,要写一大堆判断。 有没好点的办法呢? 我的做法是生成数组,可以重复调用,直接循环数组就行了。 为了方便,我把它写成了类。
class.asp
返回所有分类的数组,并按顺序排列 有4个属性: set aa=new classlist aa.id="id"//编号的名称 aa.classname="classname"//分类名称 aa.pid="pid"//父ID名称 aa.db_name="class"//表名 list=aa.arrylist()
<% class classlist private c_id private c_db_name private c_pid private c_classname public property let id(str) c_id = str end property public property let db_name(str) c_db_name = str end property public property let pid(str) c_pid = str end property public property let classname(str) c_classname = str end property
dim list()
dim i,n Private Sub Class_Initialize()'初始化变量 i=0 n=0 End Sub
public function classarry(thisid,pid)'取得下级ID if pid>0 then sql="select * from "&c_db_name&" where "&c_pid&"="&thisid else sql="select * from "&c_db_name&" where "&c_id&"="&thisid end if set rs_c=conn.execute(sql) n=n+1
do while not rs_c.eof
list(0,i)=rs_c(c_id)'装入数组中 list(1,i)=rs_c(c_classname) list(2,i)=n 'n=n+1 i=i+1 thisid=classarry(rs_c(c_id),1)'这里递归调用,直到最后一个子类
rs_c.movenext loop n=n-1 rs_c.close
end function
public function arrylist()'循环出所有根类 set rs_c=conn.execute("select count("&c_id&") from "&c_db_name) lenght=rs_c(0) rs_c.close redim list(2,lenght)'设置数组 set rs1=conn.execute("select "&c_id&" from "&c_db_name&" where "&c_pid&"=0") do while not rs1.eof call classarry(rs1(c_id),0) 'n=1 rs1.movenext loop rs1.close arrylist=list end function
end class %>
出处:蓝色理想
责任编辑:moby
上一页 下一页 [ASP]把无限级分类生成数组 [2]
◎进入论坛网络编程版块参加讨论
|