0

0

PHP无限分类的具体原理分析_PHP教程

php中文网

php中文网

发布时间:2016-07-15 13:30:29

|

854人浏览过

|

来源于php中文网

原创

对于初学的朋友来说,PHP还有很多东西需要深入的探究。只有在不断的问题处理中才能掌握其中的真挚。什么是PHP无限分类呢?就像windows下新建一个文件夹,在新建的文件夹下又可以新建一个文件夹,这样无限循环下去,无限分类也是这样,父类可以分出它子类,子类又可以分出它的子类,这样一直无限循环下去。

那PHP又是如何实现它的无限分类的呢?如何把它的各个分类一一列出来呢?
首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了。
如果我们要查找“PHP6.0出来了”这条新闻,我们先点击新闻,然后再点击PHP新闻就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反过来我们只要知道一个子类的父类,就可以把它查找出来了。这样我们在设计数据库时就可以多设计一个父类id的字段就可以实现PHP无限分类的功能了。

//我们建一个表"class"
CREATE TABLE `class` (
`id` int(11) NOT NULL auto_increment COMMENT '分类id',
`f_id` int(11) NOT NULL COMMENT '父id',
`name` varchar(25) collate gbk_bin NOT NULL COMMENT '分类名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin AUTO_INCREMENT=1 ;

//首先我们往数据库里插入‘新闻’这个大分类,因为‘新闻’是最大分类,上面没有父类了,所以我把它的f_id设置为0。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(1, 0, '新闻'); //id这个字段是自动增长的,可以不写值。

//然后我们再往数据库里插入‘PHP新闻’这个分类,它的父类‘新闻’的id是1,所以它的f_id设置为1。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(2, 1, 'PHP新闻');

//然后我们再往数据库里插入‘PHP6.0出来了’这个分类,它的父类‘PHP新闻’的id是2,所以它的f_id设置为2。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(3, 2, 'PHP6.0出来了');

//同理,我们可以这样一直往下插入分类,也就达到了PHP无限分类。
//我们可以发现插入一个分类的原则关键是找到这个分类的父类的id,然后作为这个分类的f_id字段的值。
//假设要插入跟‘新闻’同一个级别的分类‘技术’,也就是说它也是最大分类,上面没有父类了,那么它的f_id也设置为0;
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(4, 0, '技术');

//在‘技术’下面又有一个分类‘PHP技术’,那么我们怎么插入呢,首先找到‘PHP技术’的父类‘技术’的id,然后作为自己的f_id字段的值。
INSERT INTO `class` (`id`, `f_id`, `name`) VALUES(5, 4, 'PHP技术');

//看到这里,想必大家应该都明白怎么往数据库里插入各个分类了。就不再举例了。

我们已经知道如何往数据库里插入各个分类了,那又如何把各个分类罗列出来呢?

magento(麦进斗)
magento(麦进斗)

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。Magento开源网店系统的特点主要分以下几大类,网站管理促销和工具国际化支持SEO搜索引擎优化结账方式运输快递支付方式客户服务用户帐户目录管理目录浏览产品展示分析和报表Magento 1.6 主要包含以下新特性:•持久性购物 - 为不同的

下载

立即学习PHP免费学习笔记(深入)”;

<ol class="dp-xml"><li class="alt"><span><span class="tag">< ?</span><span class="tag-name">php</span><span> </span></span></li><li><span>header("Content-type:text/html;</span><span class="attribute">charset</span><span>=</span><span class="attribute-value">utf</span><span>-8");   </span></li><li class="alt"><span>$</span><span class="attribute">db</span><span>=</span><span class="attribute-value">new</span><span> mysqli("localhost","root","","news_php100") ; <br>//实例化一个数据库连接。使用这个前一定要确保已经加载了mysqli类库,<br>或者用mysql_connect这个方式连接。   </span></li><li><span>if(mysqli_connect_errno()){  </span></li><li class="alt"><span>echo "链接失败:".mysqli_connect_error();  </span></li><li><span>exit(); }   </span></li><li class="alt"><span>$db-</span><span class="tag">></span><span>query("set names utf8");  </span></li><li><span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select name from class where </span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>"); <br>//查找</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>的分类,也就是查找每一个大类。  </span></li><li class="alt"><span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span></li><li><span>echo $row['name']."</span><span class="tag">< </span><span class="tag-name">br</span><span class="tag">></span><span>"; //这样就把每个大类循环出来了。  </span></li><li class="alt"><span>}  </span></li><li><span>//同样我们可以把新闻的子类循环出来。  </span></li><li class="alt"><span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select * from class where </span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">1</span><span>"); <br>//查找</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">1</span><span>的分类,也就是查找‘新闻’的子类。  </span></li><li><span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span></li><li class="alt"><span>echo $row['name']."  </span></li><li><span>"; //这样就把‘新闻’的子类循环出来了。注意:只是子类,不包括孙子类。  </span></li><li class="alt"><span>}  </span></li><li><span>//写到这里,我们会发现一个问题,如果这个分类是10级分类,难道我们要写<br>10个循环把它每个子类循环出来?如果是更多级分类呢,这样写显然是不现实的。  </span></li><li class="alt"><span>//那又有什么办法解决呢?我们可以写一个递归的函数,把f_id作为参数传入,<br><br>不断循环每一个f_id的值,也就是说把每一个f_id值的子类循环出来。  </span></li><li><span>//首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。  </span></li><li class="alt"><span>$</span><span class="attribute">result</span><span>=$db-</span><span class="tag">></span><span>query("select * from class");  </span></li><li><span>while($</span><span class="attribute">row</span><span>=$result-</span><span class="tag">></span><span>fetch_assoc()){  </span></li><li class="alt"><span>$arr[]=array($row[id],$row[f_id],$row[name]); //每一行保存一个<br>分类的id,f_id,name的信息。  </span></li><li><span>}  </span></li><li class="alt"><span>function fenlei($</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>){ //$f_id初始化为0,也就是从最大分类开始循环.  </span></li><li><span>global $arr; //声明$arr为全局变量才可在函数里引用。  </span></li><li class="alt"><span>for($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>;$i</span><span class="tag">< </span><span class="tag-name">count</span><span>($arr);$i++){ //对每个分类进行循环。  </span></li><li><span>if($arr[$i][1]==$f_id){ //$arr[$i][1]表示第$i+1个分类的f_id的值。<br>开始$</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>,也就是把</span><span class="attribute">f_id</span><span>=</span><span class="attribute-value">0</span><span>的分类输出来。  </span></li><li class="alt"><span>echo $arr[$i][2]."</span><span class="tag">< </span><span class="tag-name">br</span><span class="tag">></span><span>"; //$arr[$i][1]表示第$i+1个分类的name的值。  </span></li><li><span>fenlei($arr[$i][0]); //$arr[$i][1]表示第$i+1个分类的id的值。进行递归<br>,也就是把自己的id作为f_id参数把自己的子类再循环出来。  </span></li><li class="alt"><span>}  </span></li><li><span>}  </span></li><li class="alt"><span>}  </span></li><li><span>fenlei(); //使用这个函数.  </span></li><li class="alt"><span class="tag">?></span><span>  </span></li></ol>

以上代码示例为我们具体讲解了有关PHP无限分类的原理及使用方法,希望能对大家有所帮助。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446274.htmlTechArticle对于初学的朋友来说,PHP还有很多东西需要深入的探究。只有在不断的问题处理中才能掌握其中的真挚。什么是PHP无限分类呢?就像window...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

28

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

23

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

27

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

16

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

164

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

309

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号