php 递归分销角色,PHP递归无限分类

我们面试程序开发的时候,经常会被问到递归的问题。今天我们在本文中以“素材火的特效分类表”作为演示,使用PHP递归结合Mysql实现无限级分类。

25a79f5b69f0bd572fbb0a1ca1b23b58.png

难易:初级

下载资源

下载积分:

50

积分

递归简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。

cats表: CREATE TABLE IF NOT EXISTS `cats` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`pid` int(11) DEFAULT '0',

`name` varchar(50) NOT NULL,

`ord` int(6) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=132 ;

INSERT INTO `cats` (`id`, `pid`, `name`, `ord`) VALUES

(1, 0, '特效分类', 1),

(2, 0, '难易程度', 2),

(3, 2, '入门级', 1),

(4, 2, '初级', 2),

(5, 2, '中级', 3),

(6, 2, '高级', 4),

(7, 1, '图片代码', 1),

(8, 1, '导航菜单', 2),

(9, 1, '选项卡/滑动门', 3),

......

演示一:返回字符串 echo get_str(0, 0); //输出无限级分类

function get_str($id = 0, $level = 0) {

global $str;

$sql = "select id,name from cats where pid= $id";

$result = mysql_query($sql); //查询pid的子类的分类

if ($result && mysql_affected_rows()) {//如果有子类

$str .= '

  • ';

$level++;

while ($row = mysql_fetch_array($result)) { //循环记录集

$str .= "

" . $row['id'] . "--" . $row['name'] . $level . ""; //构建字符串

get_str($row['id'], $level); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级

}

$str .= '

';

}

return $str;

}

演示二:返回数组 $list = get_array(0); //调用函数

print_r($list); //输出数组

function get_array($id = 0) {

$sql = "select id,name from cats where pid= $id";

$result = mysql_query($sql); //查询子类

$arr = array();

if ($result && mysql_affected_rows()) {//如果有子类

while ($rows = mysql_fetch_assoc($result)) { //循环记录集

$rows['list'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级

$arr[] = $rows; //组合数组

}

return $arr;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android音频系统之AudioPolicyService

地址:http://blog.csdn.net/edmond999/article/details/18599327 1.1 AudioPolicy Service 在AudioFlinger小节,我们反复强调它只是策略的执行者,而AudioPolicyService则是策略的制定者。这种分离方式有效地降低了整个系统的藕合性&#xff0…

程序员常去的14个顶级开发社区

我们来看一下程序员经常去的 14 个顶级开发者社区,如果你还不知道它们,那么赶紧去看看,也许会有意想不到的收获。一、Stack Overflow9 月份,Stack Overflow 也将迎来其 6 岁的生日,毫无疑问,Stack Overflo…

C#特性-表达式树

表达式树ExpressionTree 表达式树基础 转载需注明出处:http://www.cnblogs.com/tianfan/刚接触LINQ的人往往觉得表达式树很不容易理解。通过这篇文章我希望大家看到它其实并不像想象中那么难。您只要有普通的LINQ知识便可以轻松理解本文。表达式树提供一个将可执行代…

程序员的一个好习惯,你有几个?

在很多外人看来,作为我们程序员这个行业只要会敲代码会改bug基本就可以了,但是现在行业人员几近饱和,没有过硬的几把刷子就想着可以甩掉身后的大部队也是不可能的。所以说我们要不断的学习不断的充实自己让企业在裁员的时候压根就考虑不到我们的头上来。…

2017已过半,这半年,你累吗?

大半年下来有人问你挣了多少钱却从来没有人问你最近的日子你累不累近来你受了多少委屈近来有多少心酸近来经历过多少艰难最近付出了多少不被人知的辛苦有时候真的很累、很累但是所有的累只能一笑而过这个累是自己经历的积累这个累是自己身上应该有的责任除了坚强,别…

自学编程的六点技巧

有一天,我的一个在学编程的朋友问我:“我想快速学习编程,你有什么好的推荐吗?我曾在上大学的时候自学过编程,这么多年过去了,我意识到我或许是在用最困难的方式去学习和了解编程。本来我完全可以用更快的速…

信息安全系统设计基础第十周学习总结

第八章 异常控制流 (1)控制流:控制转移序列。 控制转移:从一条指令到下一条指令。 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。 (2&#xff09…

MVC、 MVP、 MVVM之间的区别

一、 简介三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。二、MVC/MVP1 、MVC1、View接受用户的交互请求2、View将请求转交给Controller3、Controller操作Model进行数据更新4、数据更…

team geek

1. 转载自http://book.douban.com/review/6007037/,版权归丸子(^.^)v所有。 New Google employees (we call “Nooglers”) often ask me what makes me effective at what I do. I tell them only half-jokingly that it’s very simple: I do the Right Thing for…

HDU 3948 不同回文子串个数

集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重。对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀进行比较去重。 几组数据 abacaba…

oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程

Oracle11g的安装教程同时解压缩两个zip文件,生成一个database文件夹,进入到database文件夹,点击setup去掉安全更新的选项,直接下一步选择创建和配置数据库,点击下一步选择服务器类,点击下一步选择单例数据库…

程序员职业路线图

今天分享一张程序员职业路线图:欢迎关注我的公众号(同步更新文章):DoNet技术分享平台阅读原文

C#编程规范整理

小编整理了一些C#编程的一些规范,希望对大家有点用处!1、命名方式Pascal命名法:每个单词首字母均大写。Camel命名法:第一个单词首字母小写,其余单词首字母大写。2、有关类的规范1、使用 Pascal 大小写。2、用名词或名词…

win7 php redis 扩展,Windows中安装Redis及php redis扩展

Windows10环境安装Redis:1、下载Redis安装包;2、解压到自定义目录;3、windows键R,输入cmd 进入命令行,进入Redis的解压目录;4、运行:redis-server.exe redis.windows.conf 显示如下,说明启动成功…

【原创】MVC+ZTree实现权限树的功能

2、html代码权限树:3、JS代码var setting {async: {enable: true,url: /RoleToPerssion/GetPerssionTree,//异步加载时的请求地址autoParam: ["roleid"],//提交参数type: get,dataType: json},check: {enable: true, //true / false 分别表示 显示 / 不…

集合习题之列出有限集合所有子集

1、题目(《离散数学及其应用》第6版P75 20 题) 给出可以列出有限集合所有子集的步骤。 2、 解题思路 假设有集合A {a1, a2 … an},列出其所有子集。 先列出含有1个元素的所有子集:{a1},{a2} … {an}然后列出含有2个元素的所有子…

C# partial 关键字的使用

C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。局部类型适用于以下情况:(1) 类型特别大,不宜放在一个文件中实现。(2) 一个类型中的一部分代码为自动化工具生成的代码&…

线段的平移和旋转

//github不会用&#xff0c;试了很久不知道怎么上传代码 #include <iostream> using namespace std;#include <stdlib.h> #include <Eigen/Dense> #include <math.h> using namespace std; using Eigen::MatrixXd; int main() { int option; struct p…

我不问+你不说

阅读原文很多事我不问你不说这就是距离我问了你不说这就是隔阂我问了你说了这就是尊重你想说我想问这就是默契我不问你说了这就是信任很多事情你看到的听到的未必是你想象的那样人生在世多给别人机会解释多些向别人解释的耐心人生会少很多遗憾不问、不说、不解释这不是酷或有个…

怎么安装redhat linux操作系统,红帽RedHat Linux5系统安装指南

介绍如何安装linux操作系统&#xff0c;以目前市场主流的操作系统为例子进行介绍。1、放入安装dvd光盘&#xff0c;然后启动服务器&#xff0c;可得如下画面&#xff1a;2、按enter键&#xff0c;进入如下画面3、选择skip&#xff0c;按enter进入&#xff0c;下面画面&#xff…