- 浏览: 230427 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jun199061:
试了下 ,报无法加载DLL “libmySQL.dll”是怎么 ...
C# 连接mysql数据库 -
朋在无锡:
靠...上当了...晕
Xdebug + Wamp 2.0 的配置 -
w156445045:
博主,您好,请问为什么我这样做没效果啊?
artDialog简单用法 -
laikk:
将服务器端的所有返回值都设置成false 后,客户端还显示登录 ...
PHPRPC for php 登陆的实现 -
laikk:
将服务器端的所有返回值都设置成false 后,客户端还显示登录 ...
PHPRPC for PHP 读取数据
这个是经过本人实践确实可以使用的。
先说下表结构。一共三个字段iClassID,iParentID,cClassName;
一个是分类的id,一个是父id,一个是分类的名字,
下面是代码:
最终效果如图:
嗯,这个我会进行相关优化,感谢提出,开博这么久,你是第一个回话的!
先说下表结构。一共三个字段iClassID,iParentID,cClassName;
一个是分类的id,一个是父id,一个是分类的名字,
下面是代码:
<?php class Tree { /* *在这里需要注意的是,类需要传入一个数组。即分类的全部数据,是一个二维的数组 * */ //分层 private $view; //private $path; private $data=array();//id=>信息 private $cateArray=array();//id=>pid public function __construct($dataArray) { foreach ($dataArray as $val) { $this->setNode($val['iClassID'], $val['iParentID'], $val['cClassName']); } $this->sortASC(); } //设置树的节点 function setNode($id, $parent, $value) { $parent = $parent?$parent:0; $this->data[$id] = $value; $this->cateArray[$id] = $parent; } /* * 递归实现 * 得到id下的子树结构数组(用多维数组格式来表示树) * id Internet 节点id (0表示的是根节点,是虚拟的,即没有与它对应的实际信息) * return array 子树节点数组 */ function getChildsTree($id=0) { $childs=array(); foreach ($this->cateArray as $child=>$parent) { if ($parent==$id) { $childs[$child]=$this->getChildsTree($child); } } return $childs; } /* * 递归实现 * 得到id节点的所有后代节点 * $id * return array 索引=>id,...一维数组(顺序important) */ function getChilds($id=0) { $childArray = array(); $childs = $this->getChild($id); foreach ($childs as $child) { $childArray[]=$child; $childArray=array_merge($childArray,$this->getChilds($child)); } return $childArray; } /* * 得到id节点的孩子节点 * $id * return array 索引=>id,...一维数组 */ function getChild($id) { $childs=array(); foreach ($this->cateArray as $child=>$parent) { if ($parent==$id) { $childs[]=$child; } } return $childs; } /* * 递归实现 * 反线获得节点id的父节点 * $id interger 不可以为0 * return array 其父节点数组 */ function getNodeLever($id) { $parents=array(); if (array_key_exists($this->cateArray[$id],$this->cateArray))//它的父节点,在节点树中 { $parents[]=$this->cateArray[$id]; $parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id])); } return $parents; } /* * 根据所在层数得到n-1个前导格式化符号 * $id Internet 不可以取0 * $preStr str 填充的格式化符号 * return str 多个格式化符号 */ function getLayer($id,$preStr='|-') { return str_repeat($preStr,count($this->getNodeLever($id))); } //得到id节点的信息 function getValue ($id) { return $this->data[$id]; } /* * id降序 */ function sortDES() { krsort($this->cateArray); } /* * id升序 */ function sortASC() { ksort($this->cateArray); } //下拉列表框样式, function select($cid = 0){ $category = $this->getChilds(0); //file_put_contents('log.txt',var_export($category,true)); foreach ($category as $key=>$id) { if($cid == $id){ $this->view .= "<option value='$id' selected='selected'>".$this->getLayer($id, '|-').$this->getValue($id)."</option>"; } else{ $this->view .= "<option value='$id'>".$this->getLayer($id, '|-').$this->getValue($id)."</option>"; } } return $this->view; } //表格样式 function view() { $category = $this->getChilds(0); foreach ($category as $key=>$id) { $this->view .= "<tr><td>".$this->getLayer($id, '|-').$this->getValue($id)."</td><td><a href='edit/id/$id'>编辑</a>|<a href='del/id/$id' onclick='if(confirm('是否确定删除')==false)return false;' >删除</a></td></tr>"; } return $this->view; } //endallfunc所有函数结束 } ?>
require("Tree.php"); mysql_connect('localhost','root',''); mysql_select_db('test'); mysql_query('set names utf8'); $result = mysql_query("select * from t_class"); $data = array(); while ($row = mysql_fetch_array($result)){ $data[] = array('iClassID'=>$row['iClassID'],'iParentID'=>$row['iParentID'],'cClassName'=>$row['cClassName']); } $t = new Tree($data); this->assign('class',$t->view());//表格样式,主要是用来编辑和删除分类 $this->assign('sclass',$t->select($id));//这里需要传一个父id,当编辑的时候,以便标识此分类所在的父分类为选中状态,如果为0 则显示的是分部分类 $this->display();
<table> {$class}//表格样式 </table> <select name='iParent'> <option value='0'>---根分类---</option> {$sclass}//下拉列表样式 </select>
最终效果如图:
评论
2 楼
yeyuan
2011-07-09
wanluoliang 写道
类很好用,不过$this->view需要在select和view中的第一句清空原有内容,否则连续调用这两个方法就有些问题。
嗯,这个我会进行相关优化,感谢提出,开博这么久,你是第一个回话的!
1 楼
wanluoliang
2011-07-06
类很好用,不过$this->view需要在select和view中的第一句清空原有内容,否则连续调用这两个方法就有些问题。
发表评论
-
phpExcel输出xls文档显示乱码的解决办法
2012-01-14 10:56 5912最近在做一些报表的系统,主要是对excel的读取和处理操作。 ... -
关于php写入文本文件时回车的问题
2011-12-25 13:20 3251今天在写日志文件的时候,发现写入的内容不会换行。查了一些资料才 ... -
自己写的一个php memcache操作类
2011-11-29 17:07 1721这个类比较简单,只是把原有的php提供的memcache提供的 ... -
如何架设svn服务器和使用TortoiseSVN
2011-11-25 09:15 4194如果团队开发的话,版 ... -
php数组转换成xml
2011-11-24 14:16 1313转自:http://www.ligaofeng.com/ ... -
windwos下安装php的memcache扩展
2011-11-23 10:11 2158以前以了解memcache的时 ... -
【转】php 时间,日期计算
2011-11-15 14:22 1036转自:http://www.oschina.net/code/ ... -
php操作mysql与sqlite类
2011-11-10 13:52 1638来源:http://www.yytweb.com/?s=art ... -
php权限管理类
2011-11-05 13:23 1372这个是在网上找的,不做解释,先保存下,以后研究, -
【转】sphinx在windows下的安装与测试
2011-11-03 16:22 1725转自:http://www.cnblogs.com/ainia ... -
php中把数组写入到文件,再读取
2011-11-03 11:14 3724之前看到很多开源项目,一些项目的配置信息一般都写在文件里, 有 ... -
关于flv无法播放的问题
2011-09-26 10:47 1291最近在使用齐博的视频系统,布置到服务器上之后,发现上传的flv ... -
phpcms设置默认首页
2011-08-22 09:59 2655最近接触过phpcms的二次开发 用的是phpcms v9 ... -
ecshop后台模块开发
2011-07-27 10:31 1534这个暂时说下方法,至 ... -
关于cookie丢失的问题
2011-05-23 15:58 4082最近在改一个微博 前台登陆之后是很正常的,转到后台之后,就 ... -
Apache 下域名绑定到子目录
2011-05-21 10:13 10653有两种实现方法: 1,在httpd.conf文件结尾处加入如下 ... -
php的一些小函数
2011-05-09 16:37 9041.舍弃小数,保留整数函数 intval(); 2. ... -
关于php 时间的处理
2011-04-22 17:44 827(1)打印明天此时的时间戳strtotime(”+1 day“ ... -
PHP SimpleXML
2011-03-26 19:02 1349最近要做一个核价的功能!就是展示一张表单,里面有很多选项根据用 ... -
webgrind 浅解
2011-03-24 14:00 2260以前用的是wamp 2,今天下载了wamp 2.1 安装成功 ...
相关推荐
无限级分类意味着一个分类可以有任意数量的子分类,这些子分类又可以有它们自己的子分类,形成一个无限延伸的树状结构。这种结构非常适合那些层次关系复杂、可能需要不断扩展的场景。 在实现过程中,通常会使用自...
无限级分类在IT行业中,特别是在数据管理和Web开发中是一个重要的概念。它允许组织和表示具有层级关系的数据,例如网站导航菜单、目录结构、组织架构或产品分类等。在这个场景中,“漂亮的无限级分类”可能指的是...
无限级分类允许我们创建一个可以无限深度扩展的分类系统,无需预先设定最大层级。下面我们将深入探讨PHP实现无限级分类的方法、常见算法以及如何结合SQL数据库进行操作。 首先,无限级分类的核心在于每个分类都有一...
1. **typeid**:这是一个整型字段,作为主键使用,用于唯一标识每一个分类节点。 2. **typename**:字符串类型字段,用于存储分类名称。 3. **parentid**:整型字段,用于存储当前分类的父分类ID。如果为0,则表示该...
本文将深入探讨这些概念,并结合"js无限级分类源码",即JavaScript实现的树型菜单无限分类的功能。 无限级分类是一种数据结构设计,它允许类别可以有任意多的子类,形成一个无限深度的层次结构。这种结构在实际应用...
无限分类允许我们创建一个无层级限制的分类结构,使得新增分类时无需预先设定最大深度,增加了系统的灵活性。在这个"无限分类带数据库"的PHP实现中,它利用数据库存储分类数据,并且优化了查询效率,只读取一次...
在左右值法中,每个分类都有一个左值和一个右值,这两个值代表了该分类在整棵树中的位置。左值较小的节点通常在其父节点的左边,而右值较大的节点则在其父节点的右边。通过比较这些值,我们可以方便地进行插入、删除...
1. **构建无限分类数据结构**:首先,我们需要一个包含分类ID、父ID和分类名的数据源,通常来源于数据库查询。然后,我们可以通过比较每个分类的父ID与其它分类的ID,构建一个嵌套的关联数组,其中键是分类ID,值是...
无限分类通常基于树形结构,每个节点都有一个父节点(除了根节点),并且可以有任意数量的子节点。在数据库设计中,通常会用到自引用关联,即分类表中的一个字段(如`parent_id`)引用同一表的主键,表示当前分类的...
1. 数据库设计:首先,需要设计一个能够存储无限级别分类的数据模型。通常采用自引用的方式,每个分类都有一个父分类ID,通过这个字段可以链接到上级分类,形成层级关系。例如,一个“商品分类”表,包含“ID”、...
例如,我们可以创建一个名为`categories`的表,包含以下字段:`id`(主键)、`name`(分类名)和`parent_id`(父分类ID)。`parent_id`字段用于表示当前分类属于哪个上级分类,当`parent_id`为0时,表示顶级分类。 ...
而这些关联的数据并不复杂,其实一个优秀的后台设计,应该是无限的分类,这样,在进行二次开发时,不用再单独进行编程了,只要是功能一样,后台添加一个分类就可以了,这样就达到了功能共享了。
递归是通过在函数内部调用自身来处理层次结构,而自连接则是将同一个表与自身进行连接,以查找子分类。 2. **ASP与数据库交互**: ASP可以利用ADO(ActiveX Data Objects)组件与数据库进行交互,如Microsoft ...
- 数据库设计:通常需要一个包含`id`(主键)、`parent_id`(父分类ID)、`name`(分类名称)等字段的分类表。有时为了提高查询效率,还会添加额外的字段,如`path`(分类路径)或`level`(层级深度)。 - 查询优化...
一个常见的设计是使用一个名为`categories`的表,包含字段如`id`(主键,唯一标识每个分类)、`name`(分类名称)、`parent_id`(父分类ID,用于表示分类层级关系)。当`parent_id`为0时,表示顶级分类;非0时,表示...
在ASP.NET中实现无限级分类的TreeView控件,是一种常见的数据展示...通过以上步骤,你可以在ASP.NET应用程序中成功实现一个无限级分类的TreeView,为用户提供清晰、直观的层次结构展示,提高用户体验和信息查找效率。
2. **数据库设计**:在`test.sql`中,通常会创建一个如`categories`的表,包含`id`(主键)、`name`(分类名)、`parent_id`(父分类ID)和`level`(层级)等字段。`parent_id`字段用于建立父子关系,`level`字段则...
对于无限级分类,通常会使用自引用的关联表,其中每个分类都有一个父分类ID字段,表示其上级分类。这样,通过递归查询或自连接查询,我们可以获取到任意级别的子分类。 文件`addshangpinlei.php`可能是一个用于添加...
2. 更新:当一个分类的父分类发生变化时,存储过程需要更新该分类及其所有子分类的层级信息。这涉及到对整条分支的遍历和调整,以保持分类树的完整性和一致性。 3. 删除:删除一个分类时,不仅要从数据库中移除这个...
无限分类允许我们创建一个无限制深度的分类结构,使得数据的管理和检索更加灵活。以下是对这个PHP无限分类源码的详细解析。 1. **无限分类原理** 无限分类通常基于自引用关联或层级标识符(如“路径”或“深度”)...