PHP无限级分类算法原理及实例演示Word文档下载推荐.docx

上传人:b****3 文档编号:18470496 上传时间:2022-12-17 格式:DOCX 页数:8 大小:17.89KB
下载 相关 举报
PHP无限级分类算法原理及实例演示Word文档下载推荐.docx_第1页
第1页 / 共8页
PHP无限级分类算法原理及实例演示Word文档下载推荐.docx_第2页
第2页 / 共8页
PHP无限级分类算法原理及实例演示Word文档下载推荐.docx_第3页
第3页 / 共8页
PHP无限级分类算法原理及实例演示Word文档下载推荐.docx_第4页
第4页 / 共8页
PHP无限级分类算法原理及实例演示Word文档下载推荐.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

PHP无限级分类算法原理及实例演示Word文档下载推荐.docx

《PHP无限级分类算法原理及实例演示Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PHP无限级分类算法原理及实例演示Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。

PHP无限级分类算法原理及实例演示Word文档下载推荐.docx

//假设要插入跟‘新闻’同一个级别的分类‘技术’,也就是说它也是最大分类,上面没有父类了,那么它的f_id也设置为0;

INSERTINTO`class`(`id`,`f_id`,`name`)VALUES(4,0,'

技术'

//在‘技术’下面又有一个分类‘PHP技术’,那么我们怎么插入呢,首先找到‘PHP技术’的父类‘技术’的id,然后作为自己的f_id字段的值。

INSERTINTO`class`(`id`,`f_id`,`name`)VALUES(5,4,'

PHP技术'

//看到这里,想必大家应该都明白怎么往数据库里插入各个分类了。

就不再举例了。

我们已经知道如何往数据库里插入各个分类了,那又如何把各个分类罗列出来呢?

<

?

phpheader("

Content-type:

text/html;

charset=utf-8"

$db=newmysqli("

localhost"

"

root"

"

news_php100"

);

//实例化一个数据库连接。

使用这个前一定要确保已经加载了mysqli类库,或者用mysql_connect这个方式连接。

if(mysqli_connect_errno()){echo"

链接失败:

.mysqli_connect_error();

exit();

}$db->

query("

setnamesutf8"

$result=$db->

selectnamefromclasswheref_id=0"

//查找f_id=0的分类,也就是查找每一个大类。

while($row=$result->

fetch_assoc()){echo$row['

name'

]."

  "

;

//这样就把每个大类循环出来了。

}//同样我们可以把新闻的子类循环出来。

select*fromclasswheref_id=1"

//查找f_id=1的分类,也就是查找‘新闻’的子类。

"

//这样就把‘新闻’的子类循环出来了。

注意:

只是子类,不包括孙子类。

}//写到这里,我们会发现一个问题,如果这个分类是10级分类,难道我们要写10个循环把它每个子类循环出来?

如果是更多级分类呢,这样写显然是不现实的。

//那又有什么办法解决呢?

我们可以写一个递归的函数,把f_id作为参数传入,不断循环每一个f_id的值,也就是说把每一个f_id值的子类循环出来。

//首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。

select*fromclass"

fetch_assoc()){$arr[]=array($row[id],$row[f_id],$row[name]);

//每一行保存一个分类的id,f_id,name的信息。

}functionfenlei($f_id=0){//$f_id初始化为0,也就是从最大分类开始循环.global$arr;

//声明$arr为全局变量才可在函数里引用。

for($i=0;

$i<

count($arr);

$i++){//对每个分类进行循环。

if($arr[$i][1]==$f_id){//$arr[$i][1]表示第$i+1个分类的f_id的值。

开始$f_id=0,也就是把f_id=0的分类输出来。

echo$arr[$i][2]."

//$arr[$i][1]表示第$i+1个分类的name的值。

fenlei($arr[$i][0]);

//$arr[$i][1]表示第$i+1个分类的id的值。

进行递归,也就是把自己的id作为f_id参数把自己的子类再循环出来。

}}}?

>

 

代码演示:

<

php

/*

数据表结构如下:

CREATETABLE`category`(

`categoryID`smallint(5)unsignedNOTNULLauto_increment,

`categoryParentID`smallint(5)unsignedNOTNULLdefault'

0'

`categoryName`varchar(50)NOTNULLdefault'

'

PRIMARYKEY(`categoryID`)

)ENGINE=MyISAMDEFAULTCHARSET=gbk;

INSERTINTO`category`(`categoryParentID`,`categoryName`)VALUES

(0,'

一级类别'

),

(1,'

二级类别'

(2,'

三级类别'

333332'

234234'

(3,'

aqqqqqd'

(4,'

哈哈'

(5,'

66333666'

*/

//指定分类id变量$category_id,然后返回该分类的所有子类

//$default_category为默认的选中的分类

functionGet_Category($category_id=0,$level=0,$default_category=0)

{

global$DB;

$sql="

SELECT*FROMcategoryORDERBYcategoryIDDESC"

$result=$DB->

query($sql);

while($rows=$DB->

fetch_array($result))

{

$category_array[$rows[categoryParentID]][$rows[categoryID]]=array('

id'

=>

$rows[categoryID],'

parent'

$rows[categoryParentID],'

$rows[categoryName]);

}

if(!

isset($category_array[$category_id]))

return"

foreach($category_array[$category_id]AS$key=>

$category)

{

if($category['

]==$default_category)

echo"

optionselectedvalue="

.$category['

}else

optionvalue="

if($level>

0)

.str_repeat("

$level)."

.$category['

]."

/option>

\n"

else

Get_Category($key,$level+1,$default_category);

unset($category_array[$category_id]);

}

函数返回的数组格式如下所示:

Array

[1]=>

Array([id]=>

1[name]=>

一级类别[level]=>

0[ParentID]=>

0)

[4]=>

4[name]=>

二级类别[level]=>

1[ParentID]=>

1)

[9]=>

9[name]=>

哈哈[level]=>

2[ParentID]=>

4)

[3]=>

3[name]=>

1)

[8]=>

8[name]=>

aqqqqqd[level]=>

3)

[2]=>

2[name]=>

[7]=>

7[name]=>

234234[level]=>

2)

[6]=>

6[name]=>

333332[level]=>

2)

[5]=>

5[name]=>

三级类别[level]=>

[10]=>

10[name]=>

66333666[level]=>

3[ParentID]=>

5)

//指定分类id,然后返回数组

functionCategory_array($category_id=0,$level=0)

query($sql);

fetch_array($result))

$category_array[$rows['

categoryParentID'

]][$rows['

categoryID'

]]=$rows;

foreach($category_arrayAS$key=>

$val)

if($key==$category_id)

foreach($valAS$k=>

$v)

$options[$k]=

array(

'

$v['

],'

categoryName'

level'

$level,'

ParentID'

=>

$v['

]

);

$children=Category_array($k,$level+1);

if(count($children)>

$options=$options+$children;

return$options;

classcate

functionGet_Category($category_id=0,$level=0,$default_category=0)

echo$category_id;

$arr=array(

1'

array('

1,'

0,'

1111'

2'

2,'

2222'

4'

4,'

4444'

),

3'

3,'

333333'

5'

5,'

555555'

6'

6,'

66666'

7'

7,'

77777'

8'

8,'

8888'

9'

9,'

9999'

isset($arr[$category_id]))

foreach($arr[$category_id]AS$key=>

$cate)

if($cate['

$txt="

.$cate['

}else{

$txt1="

-"

.$cate['

$val=$txt.$txt1;

echo$val;

self:

:

Get_Category($key,$level+1,$default_category);

functiongetFlush($category_id=0,$level=0,$default_category=0)

ob_start();

Get_Category($category_id,$level,$default_category);

$out=ob_get_contents();

ob_end_clean();

return$out;

}

$id=$_GET['

];

echo"

select>

$c=newcate();

//$c->

Get_Category();

$ttt=$c->

getFlush($id,'

'

echo$ttt;

/select>

甜品培训Gi54vB913702

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1