无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图

网上无限分类大多不全面,今天我会从设计表开始,

首先我们先做视图界面,

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>白超华-博客园</title>
</head>
<body>
<form action="" method="post">
分类名称 <input type="text" name="cat_name" value=""><br><br>
上级分类 <select name="cat_root">
<option value="">顶级分类</option>
</select>
<input type="submit">
</form>
</body>
</html>

网页展示如下:

我们首先来设计表,(需要实验的朋友直接复制SQL语句到cmd执行即可)

#创建数据库
CREATE DATABASE tree;
#选择数据库
USE tree;
#创建表
CREATE TABLE tree(
cat_id smallint UNSIGNED AUTO_INCREMENT comment '类别ID',
cat_name varchar() NOT NULL comment '类别名称',
parent_id smallint NOT NULL DEFAULT comment '类别父ID',
path varchar() NOT NULL comment '路劲结构',
PRIMARY KEY(cat_id)
)engine=MyISAM charset=utf8;

表结构如下:

其中字段 path 就是不用递归操作的重点,path用来表示下级分类深入的情况,啊哈用语言还不是很好描述,举个简单例子吧,理解的朋友就直接跳过了!

path是通过字符串存储的形式来表示类别之间的层关系,通过字符串函数我们可以知道path中 ' - ' 的数量,如果有一个表示它上面有一个父分类,

如果有两个表示它上面有两个父分类.以此类推实现无限分类。

通过表单获取的类别id和父id可以得到路径path,我们需要写一个函数来获取path,就是先插入这条数据,然后根据这条数据的id,pid制作除path然后更新到这条记录,

不使用递归的方法就是在插入path的时候需要制作一个path路径。

php代码如下:

<?php
header("Content-Type:text/html;charset=utf8");
require './Mysql.class.php';//引入数据库操作类 $db = new Mysql(); //连接数据库 //从数据表中获取数据用来显示到 select 下拉菜单.
$sql = "SELECT * FROM tree";
$result = $db->getAll($sql); //接受表单数据
if(!empty($_POST['cat_name'])){ $cat_name = trim($_POST['cat_name']);
$parent_id = isset($_POST['parent_cat']) ? $_POST['parent_cat'] : ; $sql2 = "SELECT cat_id FROM tree WHERE parent_id = $parent_id";
$cat_id = $db->getOne($sql2);
$path = path($parent_id,$cat_id); //数据入库
$sql = "INSERT INTO tree (cat_name,parent_id,path) values('$cat_name',$parent_id,$path)";
if($db->query($sql)) echo "插入成功"; foreach($result as $row){
$sun = substr_count($row['path'], '-');
if($num > ){
$pre = str_repeat('-',$sum);
}else {
$row['tree'] = $pre.$row['name'];
}
$str.=$row['tree'].'br';
}
echo $str;
}
include './tree.html'; //引入视图文件

可以自己定义输出样式

php不用递归完成无限分类,从表设计入手完整演示过程的更多相关文章

  1. TreeView递归绑定无限分类数据

    TreeView递归绑定无限分类数据 实现一个动态绑定,无限级分类数据时,需要将数据绑定到TreeView控件,分类表的结构是这样的: 字段 类型 Id int ParentId int Name N ...

  2. php递归获取无限分类菜单

    从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...

  3. PHP不使用递归的无限级分类

    不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点 代码: <?php $list = array( array('id'=>1, 'pid'= ...

  4. 后台树状菜单,js实现递归无限分类

    //新闻类别管理 public function new_classify() { $arr = M('news_classify')->where("fid = 0")-& ...

  5. Think PHP递归重新排序无限极子分类数组(递归无限极分类)

    Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...

  6. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  7. php递归无限分类、根据子类获取所有顶类

    //递归无限分类树 public static function diGui($data, $pid) { $arr = collect([]); if (empty($data)) { return ...

  8. PHP在无限分类时注意的一些问题(不保证代码完全正确哦)

    转自:PHP在无限分类时注意的一些问题(http://lxiaoke.cn) (注意:代码使用的是原生PHP,旨在提供解决思路)1 无限分类的查找(获取所有节点) 代码: /** * 无限分类查询,默 ...

  9. MySql无限分类数据结构--预排序遍历树算法

    MySql无限分类数据结构--预排序遍历树算法 无限分类是我们开发中非常常见的应用,像论坛的的版块,CMS的类别,应用的地方特别多. 我们最常见最简单的方法就是在MySql里ID ,parentID, ...

随机推荐

  1. python之多线程队列

    # 一共有以下3种队列# 1.先进先出# 2.后进先出# 3.存储数据的时候可设置优先级的队列,设置不同的优先级,取的时候按照优先级的顺序来取 下面介绍一下队列的方法,如果要使用队列,则需要导入一个模 ...

  2. K组翻转链表 · Reverse Nodes in k-Group

    [抄题]: 给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下.链表元素个数不是k的倍数,最后剩余的不用翻转. [思维问题]: [一句话思路]: // reverse head->n1 ...

  3. 使用Spring框架来管理模板类

    1. 刚才编写的代码使用的是new的方式,应该把这些类交给Spring框架来管理. 2. 修改的步骤如下 applicationContext.xml中<beans>标签的开头配置为: * ...

  4. WCF的例子

    Demo的 “Service端”以本机IIS为宿主,“Client端”以WebForm项目为例. 1.新建项目:WCF>WCF Service Application: 2.删除默认文件ISer ...

  5. [SoapUI] 各种日期计算

    import java.util.*; import java.text.SimpleDateFormat; // current date String dateNew = today() // t ...

  6. Reactor 模型(一)基本并发编程模型

    Reactor 模型(一)基本并发编程模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 在讲解 Reactor 线程模 ...

  7. Response.Redirect原理图解

  8. HTML5 history详解

    最近研究vue-router单页转跳而不向服务器请求的原理, 主要是HTML5 history以及hash的应用,支持history时使用history模式 下面详细学习了一下常用的history相关 ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)

    出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...

  10. Django入门与实践-第15章:用户注销(完结)

    # myproject/settings.py LOGOUT_REDIRECT_URL = 'home' http://127.0.0.1:8000/logout/ # myproject/urls. ...