为什么建设的网站有时候访问慢6,石家庄住建局网站,百度云虚拟主机,网站gif小图标正 文#xff1a;在一些复杂的系统中#xff0c;要求对信息栏目进行无限级的分类#xff0c;以增强系统的灵活性。那么PHP是如何实现无限级分类的呢#xff1f;我们在本文中使用递归算法并结合mysql数据表实现无限级分类。递归#xff0c;简单的说就是一段程序代码的重复调…正 文在一些复杂的系统中要求对信息栏目进行无限级的分类以增强系统的灵活性。那么PHP是如何实现无限级分类的呢我们在本文中使用递归算法并结合mysql数据表实现无限级分类。递归简单的说就是一段程序代码的重复调用当把代码写到一个自定义函数中将参数等变量保存函数中重复调用函数直到达到某个条件才跳出返回相应的数据。Mysql首先我们准备一张数据表class记录商品分类信息。表中有三个字段id分类编号主键自增长title分类名称pid所属上级分类id。class表结构CREATE TABLE IF NOT EXISTS class (id mediumint(6) NOT NULL AUTO_INCREMENT,title varchar(30) NOT NULL,pid mediumint(6) NOT NULL DEFAULT 0,PRIMARY KEY (id)) ENGINEMyISAM DEFAULT CHARSETutf8;插入数据后如图PHP根据不同的需求我们提供两种不同格式的自定义函数一种是返回字符串一种是返回数组两种函数都使用了递归方法。先看返回字符串格式的函数function get_str($id 0) {global $str;$sql select id,title from class where pid $id;$result mysql_query($sql);//查询pid的子类的分类if($result mysql_affected_rows()){//如果有子类$str . ;while ($row mysql_fetch_array($result)) { //循环记录集$str . . $row[id] . -- . $row[title] . ; //构建字符串get_str($row[id]); //调用get_str()将记录集中的id参数传入函数中继续查询下级}$str . ;}return $str;}以上函数get_str()通过递归不断查询下级分类并最终返回字符串大家可以根据项目需求修改其中的str最终生成一个无限分级列表include_once(connect.php); //连接数据库connect.php文件自己写一个啊echo get_str(0); //输出无限级分类效果如接着我们来看返回数组格式的函数一样要使用递归function get_array($id0){$sql select id,title from class where pid $id;$result mysql_query($sql);//查询子类$arr array();if($result mysql_affected_rows()){//如果有子类while($rowsmysql_fetch_assoc($result)){ //循环记录集$rows[list] get_array($rows[id]); //调用函数传入参数继续查询下级$arr[] $rows; //组合数组}return $arr;}}函数get_array()返回了数组这是我们期待的所以笔者推荐使用get_array()得到数组这样一来我们可以对数组进行任意操作比如我们可以将数组转换成json格式的数据传给前端页面前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表下拉分类列表等。include_once(connect.php); //连接数据库$list get_array(0); //调用函数print_r($list); //输出数组输出效果如如果要输出json格式的数据则可使用echo json_encode($list);(参考PHP递归实现无限级分类)比如飘易实际中用到的把无限级分类放到 select 元素中//递归无限极 读取所有分组$qian_i0;function get_group_str($id 0) {global $conn,$qian_i;$sql select * from group where fid $id;$result mysql_query($sql);//查询pid的子类的分类if($result mysql_affected_rows()){//如果有子类$qian_i;while ($row mysql_fetch_array($result)) { //循环记录集$qian str_repeat(, ($qian_i-1)*6);$str . $qian . $row[title] . ; //构建字符串$str . get_group_str($row[id]); //递归调用函数本身将记录集中的id参数传入函数中继续查询下级}$qian_i--;}return $str;}$opt顶级分组;$opt.get_group_str(0);注意实际使用中请将上面红色的全角空格代码转换成半角代码。效果图再看下另外一种不错的递归写法/*** select选项 - 递归无限级 读取所有分类* 输出数组 可转json字符串供前端转换成js对象*/function digui_js( $id0 ) {global $db;$dgArr[];$cats db_select_all( meeting_types, parent_id$id order by sort_id desc,id asc );if ( $cats!null ) {foreach ( $cats as $cat ) { //循环$dgArr[] [id$cat[id], title$cat[title], subsetdigui_js( $cat[id] )];}}return $dgArr;}$digui_js json_encode(digui_js());print_r($digui_js);本文结束。