PHP无限级分类算法Word文档格式.docx
- 文档编号:21615000
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:8
- 大小:17.80KB
PHP无限级分类算法Word文档格式.docx
《PHP无限级分类算法Word文档格式.docx》由会员分享,可在线阅读,更多相关《PHP无限级分类算法Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
//假设要插入跟‘新闻’同一个级别的分类‘技术’,也就是说它也是最大分类,上面没有父类了,那么它的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>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 无限 分类 算法