比较简单实用的PHP无限分类源码分享(思路不错)


Posted in PHP onOctober 13, 2011

下面一段代码是创建相应数据库的sql代码:

 //////////////
   //////无限分类的数据库设计及样例
   //////////////
   mysql> create database db_kind;
   Query OK, 1 row affected   mysql> use db_kind;
   Database changed
   mysql> create table tb_kind(
     -> id int not null auto_increment primary key,
     -> pid int,
     -> path varchar(200)
     -> );
 Query OK, 0 rows affected
 mysql> insert into tb_kind values(null,"新闻",0,0);
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"视频",0,0);
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"图片",0,0);
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"博客",0,0);
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"体育新闻",1,"0-1");
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"娱乐新闻",1,"0-1");
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"财经新闻",1,"0-1");
 Query OK, 1 row affected
 mysql> select * from db_kind;
 ERROR 1146 : Table 'db_kind.db_kind' doesnot exist
 mysql> select * from tb
 _kind;
 +----+----------+-----+------+
 | id | pname    | pid | path |
 +----+----------+-----+------+
 |  1 | 新闻     |   0 | 0    |
 |  2 | 视频     |   0 | 0    |
 |  3 | 图片     |   0 | 0    |
 |  4 | 博客     |   0 | 0    |
 |  5 | 体育新闻 |   1 | 0-1  |
 |  6 | 娱乐新闻 |   1 | 0-1  |
 |  7 | 财经新闻 |   1 | 0-1  |
 +----+----------+-----+------+
 7 rows in set
 mysql> insert into tb_kind values(null,"篮球新闻",5,"0-1-5");
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"足球新闻",5,"0-1-5");
 Query OK, 1 row affected
 mysql> select * from tb_kind;
 +----+----------+-----+-------+
 | id | pname    | pid | path  |
 +----+----------+-----+-------+
 |  1 | 新闻     |   0 | 0     |
 |  2 | 视频     |   0 | 0     |
 |  3 | 图片     |   0 | 0     |
 |  4 | 博客     |   0 | 0     |
 |  5 | 体育新闻 |   1 | 0-1   |
 |  6 | 娱乐新闻 |   1 | 0-1   |
 |  7 | 财经新闻 |   1 | 0-1   |
 |  8 | 篮球新闻 |   5 | 0-1-5 |
 |  9 | 足球新闻 |   5 | 0-1-5 |
 +----+----------+-----+-------+
 9 rows in set
 mysql> insert into tb_kind values(null,"NBA",8,"0-1-5-8");
 Query OK, 1 row affected
 mysql> insert into tb_kind values(null,"CBA",8,"0-1-5-8");
 Query OK, 1 row affected
 mysql> select * from tb_kind;
 +----+----------+-----+---------+
 | id | pname    | pid | path    |
 +----+----------+-----+---------+
 |  1 | 新闻     |   0 | 0       |
 |  2 | 视频     |   0 | 0       |
 |  3 | 图片     |   0 | 0       |
 |  4 | 博客     |   0 | 0       |
 |  5 | 体育新闻 |   1 | 0-1     |
 |  6 | 娱乐新闻 |   1 | 0-1     |
 |  7 | 财经新闻 |   1 | 0-1     |
 |  8 | 篮球新闻 |   5 | 0-1-5   |
 |  9 | 足球新闻 |   5 | 0-1-5   |
 | 10 | NBA      |   8 | 0-1-5-8 |
 | 11 | CBA      |   8 | 0-1-5-8 |
 +----+----------+-----+---------+
 11 rows in set
 mysql> select concat(path,"-",id) from tb_kind;
 +---------------------+
 | concat(path,"-",id) |
 +---------------------+
 | 0-1                 |
 | 0-2                 |
 | 0-3                 |
 | 0-4                 |
 | 0-1-5               |
 | 0-1-6               |
 | 0-1-7               |
 | 0-1-5-8             |
 | 0-1-5-9             |
 | 0-1-5-8-10          |
 | 0-1-5-8-11          |
 +---------------------+
 11 rows in set
 mysql> select concat(path,"-",id) from tb_kind;
 +---------------------+
 | concat(path,"-",id) |
 +---------------------+
 | 0-1                 |
 | 0-2                 |
 | 0-3                 |
 | 0-4                 |
 | 0-1-5               |
 | 0-1-6               |
 | 0-1-7               |
 | 0-1-5-8             |
 | 0-1-5-9             |
 | 0-1-5-8-10          |
 | 0-1-5-8-11          |
 +---------------------+
 11 rows in set
 mysql> select concat(path,"-",id) as abs from tb_kind order by abs.path;
 ERROR 1054 : Unknown column 'abs.path' in 'order clause'
 mysql> select concat(path,"-",id) as abs from tb_kind order by abs
 +------------+
 | abs        |
 +------------+
 | 0-1        |
 | 0-1-5      |
 | 0-1-5-8    |
 | 0-1-5-8-10 |
 | 0-1-5-8-11 |
 | 0-1-5-9    |
 | 0-1-6      |
 | 0-1-7      |
 | 0-2        |
 | 0-3        |
 | 0-4        |
 +------------+
 11 rows in set
 mysql> select concat(path,"-",id) as,id,name,path abs from tb_kind order by abs;
 ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id,name,path abs from tb_kind order by abs' at line 1
 mysql> select concat(path,"-",id) as abs,
 id,pname,path abs from tb_kind order by abs;
 +------------+----+----------+---------+
 | abs        | id | pname    | abs     |
 +------------+----+----------+---------+
 | 0-1        |  1 | 新闻     | 0       |
 | 0-1-5      |  5 | 体育新闻 | 0-1     |
 | 0-1-5-8    |  8 | 篮球新闻 | 0-1-5   |
 | 0-1-5-8-10 | 10 | NBA      | 0-1-5-8 |
 | 0-1-5-8-11 | 11 | CBA      | 0-1-5-8 |
 | 0-1-5-9    |  9 | 足球新闻 | 0-1-5   |
 | 0-1-6      |  6 | 娱乐新闻 | 0-1     |
 | 0-1-7      |  7 | 财经新闻 | 0-1     |
 | 0-2        |  2 | 视频     | 0       |
 | 0-3        |  3 | 图片     | 0       |
 | 0-4        |  4 | 博客     | 0       |
 +------------+----+----------+---------+
 11 rows in set
 mysql>

下面是php源文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>无标题文档</title> 
</head> 
<body> 
<!--显示结果 
新闻 
体育新闻 
篮球新闻 
NBA 
CBA 
足球新闻 
娱乐新闻 
财经新闻 
视频 
图片 
博客 
--> 
<? 
$conn=mysql_connect("localhost","root","root"); 
mysql_select_db("db_kind"); 
mysql_query("set names utf8"); 
$sql="select concat(path,'-',id) as abspath,id,pname,path from tb_kind order by abspath"; 
$rs=mysql_query($sql); 
while($result=mysql_fetch_assoc($rs)){ 
$num=count(explode("-",$result[path]))-1; 
$new_str=str_repeat("---",$num); 
echo $new_str.$result[pname]; 
echo "<br>"; 
} 
$str=str_repeat("=",10); 
echo $str; 
$num=count(explode("-","0-1-5-8"))-1; 
echo $num; 
?> 
</body> 
</html>

上面的代码中其实中间有空格的输入效果还是非常不错的,请大家本地测试。因编辑器问题导致排版混乱。
PHP 相关文章推荐
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
PHP安全防范技巧分享
Nov 03 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
php 错误处理经验分享
Oct 11 #PHP
php购物车实现代码
Oct 10 #PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 #PHP
PHP实现时间轴函数代码
Oct 08 #PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 #PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 #PHP
php实现用户在线时间统计详解
Oct 08 #PHP
You might like
php遍历CSV类实例
2015/04/14 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
python安装Scrapy图文教程
2017/08/14 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
python模糊图片过滤的方法
2018/12/14 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Python 下载及安装详细步骤
2019/11/04 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
django admin 添加自定义链接方式
2020/03/11 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
中职生自荐信
2013/10/13 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
自我推荐信范文
2014/05/09 职场文书
二手车交易协议书标准版
2014/11/16 职场文书