#递归实现无线分类php
##1.两种使用场景mysql
分类下拉类表主要使用在后台添加商品或者文章界面选择分类的时候。sql
db数据库
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for catedeep -- ---------------------------- DROP TABLE IF EXISTS `catedeep`; CREATE TABLE `catedeep` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL DEFAULT '0' COMMENT '父级ID', `catename` varchar(25) DEFAULT NULL COMMENT '分类名称', `order` int(11) DEFAULT '100' COMMENT '排序', `createtime` datetime NOT NULL, `updatetime` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
connect数组
$db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="test"; $con=mysql_connect($db_host,$db_name,$db_password)or die(mysql_error()); mysql_select_db($db_name,$con)or die(mysql_error()); mysql_query("set names utf8")or die("编码设置错误");
code函数
/** * [combobox description] * @param integer $pid [父级id根节点为0] * @param array &$result [递归保存的数组,以参数引用的方式传递] * @param integer $spac [缩进体现的数量] * @return [type] [description] */ function combobox($pid=0,&$result=array(),$spac=0){ $spac=$spac+2; $sql="select * from deepcate where pid=$pid"; $res=mysql_query($sql);//结果集 while($row=mysql_fetch_assoc($res)){//首先读书一级分类,得到一级的id并把它做为下一次递归的条件去找子集 $row['catename']=str_repeat(" ",$spac).$row['catename']; $result[]=$row;//数据保存数组 combobox($row['id'],$result,$spac); //找个一个分类的全部再找下一个分类 } return $result; }
核心关键点就是查询where pid=id(父级ID),可不能够一次查出全部须要的数据再循环遍历呢oop
<?php $db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="deeploop"; $con=mysqli_connect($db_host,$db_user,$db_password,$db_name); mysqli_query($con,"set names utf8"); /** * [combobox description] * @param integer $pid [父级id根节点为0] * @param array &$result [递归保存的数组,以参数引用的方式传递] * @param integer $spac [缩进体现的数量] * @return [type] [description] */ function combobox($pid=0,&$result=array(),$spac=0){ global $con; $spac=$spac+2; $sql="select * from catedeep where pid=$pid"; $res=mysqli_query($con ,$sql);//结果集 while($row=mysqli_fetch_assoc($res)){//首先读书一级分类,得到一级的id并把它做为下一次递归的条件去找子集 $row['catename']=str_repeat(" ",$spac).$row['catename']; $result[]=$row;//数据保存数组 combobox($row['id'],$result,$spac); //找个一个分类的全部再找下一个分类 } return $result; } $res=combobox(); echo "<pre/>"; print_r($res); ?>
写一个试图ui 穿参数设置默认选中谁(编辑的时候的)fetch
##3.面包屑导航实现ui
面包屑导航在前台显示路劲或者所属分类的时候用到编码
code
<?php $db_host="localhost"; $db_user="root"; $db_password="root"; $db_name="deeploop"; $con=mysqli_connect($db_host,$db_user,$db_password,$db_name); mysqli_query($con,"set names utf8"); /** * [combobox description] * @param integer $pid [父级id根节点为0] * @param array &$result [递归保存的数组,以参数引用的方式传递] * @param integer $spac [缩进体现的数量] * @return [type] [description] */ function breadcrumbs($id,&$result=array()){ global $con; $sql="select * from catedeep where id=$id"; $res=mysqli_query($con ,$sql);//结果集 $row=mysqli_fetch_assoc($res);//找到一条分类记录,找到记录中的中的pid做为下一查询的条件 if($row){ $result[]=$row; breadcrumbs($row['pid'],$result); } echo 11; krsort($result); return $result; } $res=breadcrumbs(6); echo "<pre/>"; print_r($res); ?>
在方法中查询数据库好很差呢?
krsort()
str_reapeat()