`
renzhen
  • 浏览: 251604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP高效获取树结构信息

    博客分类:
  • PHP
PHP 
阅读更多
  在开发中,经常有一些简单的树形结构的存储,比如产品的多级分类,多级导航栏菜单等,这些物体有一个特性,就是通常会获取整棵树结构。在数据库里保存树结构的方法主要有三种,最简单的一就是通过一个father_id指向当前结构的父节点。对于这样的小结构,一般我们使用最简单的方式存储。
  当要获取整棵树结构,网上一般用递归法,这种方式代码简单易懂,但是缺点是需要执行多次数据库查询,而且后面几次获取的元素数量很少甚至为0,效率很差。
  其实,遇到这种情况,可以将所有的元素全部从数据库获取出来,然后再根据获取的元素father_id构建树结构,这样就可以解决执行多次数据库查询的性能损耗。下面就以我在实际项目中获取多级导航栏菜单中的函数进抛砖引玉了
/*
通过数据库获取所有元素,通过下面函数构造树形结构
*/
private function getTree($menus)
{
    	$id = $level = 0;
	$menuobjs=array();
    	$tree = array();
	$notrootmenu=array();
    	foreach($menus as $menu){
	        $menuobj=new stdClass();
		$menuobj->menu=$menu;
    		$id = $menu['id'];
		$level = $menu['father_id'];
		$menuobj->nodes = array();
		$menuobjs[$id]=$menuobj;
		if ($level) {
			$notrootmenu[]=$menuobj;
		} else {
			$tree[] = $menuobj;
		}
    	}

		foreach($notrootmenu as $menuobj){
			$menu=$menuobj->menu;
			$id = $menu['id'];
			$level = $menu['father_id'];
			$menuobjs[$level]->nodes[]=$menuobj;
		}
    	return $tree;
    }
}

我的微博地址:http://weibo.com/jameren,欢迎大家关注,  。
顺便做个广告:
引用

我最近使用了15G超大空间免费网络U盘—@酷盘,可在PC及手机上使用,无文件类型及大小限制,传输速度快,文件永不丢失,一起来体验吧!通过下面的邀请链接注册,你和我都将额外获得256MB的酷盘空间! http://t.cn/aNLZje

1
1
分享到:
评论

相关推荐

    ajax树结构很不错耶

    总的来说,"ajax树结构"是利用Ajax技术和前端开发技巧来创建的一种交互式、动态的可视化数据结构,它可以提供高效、流畅的用户体验,尤其适用于需要展现层次关系的场景。"TreeWiewDemo"则是一个具体的实现例子,可以...

    Extjs4树结构异步加载

    ExtJS4是一款强大的JavaScript框架,用于构建富...通过这样的方式,我们可以构建一个动态、高效的ExtJS4树结构,仅在需要时加载数据,提升用户体验。同时,这种方式也使得开发者能够更好地控制数据流,降低服务器压力。

    Ajax无级分类树形结构

    在这个场景中,Ajax用于获取服务器上的文件目录结构,并将其转化为可交互的树形结构。 接着,"基于fileTree做得修改"意味着这个实现是基于某个现有的文件树插件(如jQuery File Tree)进行的定制化开发。fileTree...

    一次集合遍历实现树形结构 - server

    对于大型树,可能需要使用更高效的数据结构和算法,如自平衡二叉查找树(AVL、红黑树)或者B树。此外,还可以利用缓存技术,如Redis,来提高数据获取的效率。 总之,一次集合遍历实现树形结构是Java和Spring Boot...

    PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例

    展示这样的树结构可以通过递归PHP函数实现,如`show_children`函数,它接收父节点ID和层级信息,通过循环遍历并递归调用自身,以显示整个树或指定父节点下的子树。此外,还有`get_path`函数,可以获取从根节点到指定...

    js PHP目录树

    JavaScript 和 PHP 在构建目录树结构方面的应用主要集中在文件管理系统、网站导航、代码编辑器或文件浏览器等场景。这里我们将深入探讨如何使用这两种语言来创建一个动态的目录树。 标题 "js PHP目录树" 暗示我们要...

    php递归获取子级,父级,无限极分类,带demo,效率超高

    当处理树形结构(如分类)时,一个节点可能有多个子节点,每个子节点又可以有子节点,以此类推,形成无限级的结构。递归函数会从当前节点开始,逐级向下遍历,直到没有子节点为止。 2. **无限级分类**: 无限级...

    php无限分类树类方法

    在本篇文章中,我们将深入探讨如何使用PHP创建一个类来实现无限分类树的方法,以便能够方便地获取、遍历和操作这个树结构。 首先,我们需要理解无限分类树的核心概念。在数据库设计中,类别表通常有一个`parent_id`...

    基于layui实现树形穿梭框

    - 加载数据:使用layui的API加载树形结构的数据,通常是从服务器获取JSON格式的数据,然后调用`layui.tree`方法生成树形结构。 - 绑定事件:监听用户的点击操作,通过`layui.form.on('select')`方法捕获选择变化,...

    php实现的树形结构数据存取类实例

    它根据给定的节点ID从树结构中查找子节点,并返回一个`Tree`对象,包含了所有子节点的信息。 ```php public function getChild($id) { // ... } ``` 此外,类中还可能包含其他方法,如获取父节点(`getParent`)...

    PHP ajax Tree树形菜单.zip

    它可能包括读取目录结构、获取文件信息、进行必要的权限检查等。PHP可以通过`scandir()`函数遍历目录,然后将结果组织成JSON格式的数据,以供前端使用。此外,PHP还可以处理用户提交的请求,例如创建、删除、重命名...

    数据结构和算法分析的PHP描述

    为了更高效地存储稀疏数组,通常会采用压缩存储的方式,只保留那些非默认值的元素及其索引信息,这样可以在很大程度上减少内存占用。 **保存棋局(稀疏矩阵)** 在围棋、象棋等棋类游戏中,棋盘的状态可以被看作是一...

    部门或人员下拉框树形

    "部门或人员下拉框树形"是一种常见的UI元素,它将传统的下拉框与树形结构相结合,以提供更直观、高效的筛选和选择体验。这个设计尤其适用于组织结构复杂、部门或人员众多的企业系统,用户可以通过展开和折叠节点来...

    精美PHP许愿树 V1.1

    从标签来看,"源程序"意味着我们可以获取到程序的原始代码,这对于开发者来说是非常有价值的,他们可以深入研究代码结构,学习编程技巧,甚至对其进行定制或二次开发。"php"标签表明了该程序是使用PHP语言编写的,...

    php无限分类树形类的实现.zip

    3. **获取树形结构**:生成树形结构的HTML代码,可以用于前端展示。这个方法可能使用递归调用自身来处理子节点。 4. **查找节点**:根据ID查找特定节点,用于编辑或删除操作。 5. **更新节点**:更新节点的信息,如...

    PHP+ajax 无刷新评论 整改版

    总的来说,这个"PHP+ajax 无刷新评论 整改版"项目结合了前后端技术,实现了用户友好且高效的评论系统。前端通过AJAX与后端PHP通信,实时更新评论,而后端则负责处理数据和与数据库的交互。通过这个项目,我们可以...

    基于ajax的动态树实现

    在IT行业中,动态树结构是一种常见的用户界面元素,它用于展示层次化数据,例如文件系统、组织架构或网站导航。本项目"基于Ajax的动态树实现"是利用Struts框架和Ajax技术来创建一个交互式的、能实时更新的树形视图。...

    PHP ajax Tree树形菜单.rar

    通过遍历目录,获取子目录和文件名,然后构建一个多级嵌套的数组结构,这个结构可以方便地映射到前端的树形菜单节点。 其次,AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下,与服务器...

    php增强版的树形分类

    本文将深入探讨如何使用PHP实现一个增强版的树形分类系统,包括生成2维数组、修饰符(可替换为图片)、获取父级与子级数组、当前位置数组以及格式化数组的方法。 首先,我们需要理解树形分类的基本概念。在计算机...

Global site tag (gtag.js) - Google Analytics