好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php递归菜单树 php递归函数详解

很多站长朋友们都不太清楚php递归菜单树,今天小编就来给大家整理php递归菜单树,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 php(菜单的制作,怎么用递归) 2、 PHP递归树形菜单 3、 PHP怎么递归 4、 php递归生成树型数组 5、 php怎么用递归做商城类三级导航菜单 6、 用php做树形菜单,但是什么都显示不出来 php(菜单的制作,怎么用递归)

现在国内很多个人站长都要求无限级菜单,但其实真正商业用,2级或3级菜单足够了。无限级没有意义,而且递归太耗CPU,其实是不足取的。

不过既然问了,还是说一下无限级菜单的原理吧:

1、数据库结构:只有三个字段是必须的:

id:菜单编号

title:菜单标题

pid:上级菜单

2、生成数组:

如果只是用于菜单显示的话,数组可以根据上级分类来取:写一个getArray(pid)的函数,根据上级菜单是什么,来取得同级菜单。顶级菜单的pid是0,如果取得的数据为空,那么就是没有子菜单。

原理就这么简单。你网上看源码,还会有各种其它需求,比如一次树状列出所有菜单等等,所有源码就会显得很复杂。自己根据我说的原理写,相对还是简单的,只是做flash菜单的话,不需要递归。

最好让你老板确定菜单层数,这样写起来会容易得多。

PHP递归树形菜单

可以参考以下代码,但需要把你自己的数据库链接,表等改一下就可以了

<html>

<head>

<link href='style.css' rel=stylesheet>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script language="JavaScript" src="TreeMenu.js"></script>

</head>

<body>

<?php

//基本变量设置

$GLOBALS["ID"] =1; //用来跟踪下拉菜单的ID号

$layer=1; //用来跟踪当前菜单的级数

//连接数据库

$Con=mysql_connect("localhost","root","1234");

mysql_select_db("wiki");

//提取一级菜单

$sql="SELECT * FROM wiki where pid=0";

$result=mysql_query($sql,$Con);

//如果一级菜单存在则开始菜单的显示

if(mysql_num_rows($result)>0) ShowTreeMenu($Con,$result,$layer,$ID);

//=============================================

//显示树型菜单函数 ShowTreeMenu($con,$result,$layer)

//$con:数据库连接

//$result:需要显示的菜单记录集

//layer:需要显示的菜单的级数

//=============================================

function ShowTreeMenu($Con,$result,$layer)

{

//取得需要显示的菜单的项目数

$numrows=mysql_num_rows($result);

//开始显示菜单,每个子菜单都用一个表格来表示

echo "<table cellpadding='0' cellspacing='0' border='0'>";

for($rows=0;$rows<$numrows;$rows++)

{

//将当前菜单项目的内容导入数组

$menu=mysql_fetch_array($result);

//提取菜单项目的子菜单记录集

$sql="select * from wiki where pid=$menu[cid]";

$result_sub=mysql_query($sql,$Con);

echo "<tr>";

//如果该菜单项目有子菜单,则添加JavaScript onClick语句

if(mysql_num_rows($result_sub)>0)

{

echo "<td width='20'><img src='/data/upload/help/202303/02/b3eb0a7910dcbf9df4d7ab7b9511f96f.gif' border='0'></td>";

echo "<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'>";

}

else

{

echo "<td width='20'><img src='/data/upload/help/202303/02/c5ee0ef1b3d3c76b614b20da3f6f6220.gif' border='0'></td>";

echo "<td class='Menu'>";

}

//如果该菜单项目没有子菜单,并指定了超级连接地址,则指定为超级连接,

//否则只显示菜单名称

//if($menu[url]!="")

//echo "<a href='$menu[cid]'>$menu[name]</a>";

//else

echo $menu['name'];

echo "

</td>

</tr>

";

//如果该菜单项目有子菜单,则显示子菜单

if(mysql_num_rows($result_sub)>0)

{

//指定该子菜单的ID和style,以便和onClick语句相对应

echo "<tr id=Menu".$GLOBALS["ID"]++." style='display:none'>";

echo "<td width='20'> </td>";

echo "<td>";

//将级数加1

$layer++;

//递归调用ShowTreeMenu()函数,生成子菜单

ShowTreeMenu($Con,$result_sub,$layer);

//子菜单处理完成,返回到递归的上一层,将级数减1

$layer--;

echo "</td></tr>";

}

//继续显示下一个菜单项目

}

echo "</table>";

}

?>

</body>

</html>

PHP怎么递归

下面我举一个其他的例子,虽然不是族谱,但是原理都是一样的。

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么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`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入数据后,如图:

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 .= '<ul>';

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

$str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>"; //构建字符串

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

}

$str .= '</ul>';

}

return $str;

}

以上函数get_str()通过递归,不断查询下级分类,并最终返回字符串,大家可以根据项目需求修改其中的str,最终生成一个无限分级列表:

include_once('connect.php'); //连接数据库,connect.php文件自己写一个啊

echo get_str(0); //输出无限级分类

效果如:

接着我们来看返回数组格式的函数,一样要使用递归:

function get_array($id=0){

$sql = "select id,title from class 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;

}

}

函数get_array()返回了数组,这是我们期待的,所以笔者推荐使用get_array()得到数组,这样一来,我们可以对数组进行任意操作,比如我们可以将数组转换成json格式的数据传给前端页面,前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表,下拉分类列表等。

include_once('connect.php'); //连接数据库

$list = get_array(0); //调用函数

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

输出效果如:

如果要输出json格式的数据,则可使用:

echo json_encode($list);

php递归生成树型数组

public function tree($list, $parent) {

//保证找到的元素都放在一个数组$tree内,应该是$tree在所有的tree函数都共享

static $tree;

//遍历该数组,找到parent值为当前传递进来的$parent_id;

foreach($list as $row) {

//判断

if($row['parent'] == $parent) {

//保存起来

$tree[] = $row;

//依据当前所找到的分类,找到其子节点,操作相同,递归完成

$this->tree($list, $row['id']);

}

}

return $tree;

}

你把你的数组带进去,这个是在类里面实现的,如果你只是想单独用个方法,你就把public以及'$this->'去掉就行了

php怎么用递归做商城类三级导航菜单

字符串和数组方式无限级分类。

如 字符串

header('Content-type: text/html; charset=utf-8');

include_once('connect.php');

function get_str($id=0){

global $str;

$sql="select id,title from class where pid=$id";

$result=mysql_query($sql);

if($resultmysql_affected_rows()){

$str.="<ul>";

while($row=mysql_fetch_array($result)){

$str.="<li>".$row['id']."--".$row['title']."</li>";

get_str($row['id']);

}

$str.="</ul>";

}

return $str;

}

echo get_str(0);

用php做树形菜单,但是什么都显示不出来

看代码很难看出哪里出问题,教你个方法,你先从查询数据库开始使用print_r();打印数据,看看是否查询到数据,一层一层的打印

关于php递归菜单树的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php递归菜单树 php递归函数详解的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did242382
更新时间:2023-05-28   阅读:27次

上一篇: php转发当前请求 请求转发后面的代码还继续执行吗

下一篇:php分页sql语句 分页的sql语句

相关资讯

最新资料更新

  • 1.phpfpm出错 php报错信息
  • 2.php7.1des加密 php7 加密
  • 3.php键值怎么转换 php字符转换成数字
  • 4.php多线程上锁 php8 jit 多线程
  • 5.vista打不开php php页面打不开
  • 6.影视php解析api php解析vip视频
  • 7.php时间戳转换字符串 php 时间戳转日期
  • 8.php大数据算法 php如何处理大数据
  • 9.php系统源代码下载 php源码免费下载
  • 10.phpsmtp配置项 php 配置
  • 11.析构函数php 析构函数不能指定返回类型
  • 12.vscode开发php vscode开发JAVA方便吗
  • 13.php下载csv乱码 php下载文件名乱码
  • 14.php提示重复提交 php api防止重复提交
  • 15.php导出cvs php导出csv大数据
  • 16.php添加字体水印 php设置字体
  • 17.erpphp源码下载 thinkphp erp源码
  • 18.学校php培训机构 php培训学校是什么意思
  • 19.网页php查看源代码 php怎么看源码
  • 20.mac安装php扩展 mac系统安装php环境

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]