宝哥软件园

PHP无限极点分类函数实现方法详解

编辑:宝哥软件园 来源:互联网 时间:2021-09-05

本文给出了一个例子来描述PHP无限极点分类函数的实现方法。分享给大家参考,如下:

在开发程序时,有时需要获取所有的列(包括一级列、二级列、三级列等。),并根据父子关系形成树形结构。您可以使用递归或通过引用(在php中,引用类似于C或C中的指针,但换句话说)。

参考无限极点分类

思考:

1.即把所有需要处理的数据打包成一个下标为主键id(pk)的数组,便于pid获取对应的父列。

2.循环包装好的数据。如果是根节点,将其引用添加到树中;否则,将其引用添加到其父类的子元素中。这样,虽然只有根节点被添加到树中,但是如果每个根节点都有子元素,那么它就包含子元素的引用。因此,它可以形成一棵树。

代码如下

/* * *将返回的数据集转换为Tree * @param array $list要转换的数据集* @param string $pk自增字段(列id) * @param string $pid父标记字段* @ return array * @ author dqs[emailprotected]*/function make _ Tree($ list,$pk='id ',$pid='pid ',$child='_child ',$ root=0){ $ Tree=array();$ PackData=array();foreach($ list as $ data){ $ packData[$ data[$ PK]]=$ data;} foreach($ pack data as $ key=$ val){ if($ val[$ PID]==$ root){//代表节点$ tree[]=$ pack data[$ key];}else{ //找到了它的父类$ pack data[$ val[$ PID]][$ child][]=$ pack data[$ key];} }返回$ tree}数据结构如下:

实施结果如下

数组([0]=数组([id]=6[PID]=0[title]=test1[URL]=test1[sort]=0[create _ time]=1464076199[update _ time]=1464076199[status]=1[target]=0][1]=数组([id]=7[PID]=0[title]=test2[URL]=test2[sort]=0[create _ time]=1464076218=首页[URL]=索引/索引[排序]=1[create _ time]=1379475111[update _ time]=1379923177[status]=1[target]=0[3]=array([id]=2[PID]=0[title]=blog[URL]=Article/index? category=blog[sort]=2[create _ time]=1379475131[update _ time]=1379483713[status]=1[target]=0[_ child]=Array([0]=Array([id]=4[PID]=2[title]=个人blog[URL]=own blog[sort]=0[create _ time]=146407558[update _ time]=146407558[status]=1[1]=0[create _ time]=1464077276[update _ time]=1464077276[status]=1[target]=0)))[1]=数组([id]=5 [PID]=2 [title]=其他博客[URL]=其他博客[sort]=0[create _ time]=1464075582[update _ time]=146407582[status]=1[target]=0))][4]

/** * 把返回的数据集转换成树* @param数组$列表要转换的数据集* @param字符串$pid父级标记字段* @param字符串$级别级别标记字段* @返回数组* @作者麦当苗儿[电子邮件保护]*/function list _ to _ tree($ list,$pk='id ',$pid='pid ',$child='_child ',$root=0) { //创建tree $ tree=array();if(is_array($list)) { //创建基于主键的数组引用$ refer=array();foreach($ list as $ key=$ data){ $ refer[$ data[$ PK]=$ list[$ key];} foreach ($list as $key=$data) { //判断是否存在父$ ParentID=$ data[$ PID];if($ root==$ ParentID){ $ tree[]=$ list[$ key];} else { if(isset($ refer[$ parent id]){ $ parent=$ refer[$ parent id];$ parent[$ child][]=$ list[$ key];} } } }返回$ tree}通过递归方式实现无限极分类

思路:

1.使用循环,分别获取所有的根节点。

2.在获取每个节点的时候,将该节点从原数据中移除,并递归方式获取其所有的子节点,一直原数据为空。

代码实现如下:

函数make_tree1($list,$pk='id ',$pid='pid ',$child='_child ',$ root=0){ $ tree=array();foreach($列表为$ key=$ val){ if($ val[$ PID]==$ root){//获取当前$pid所有子类unset($ list[$ key]);if(!空($ list)){ $child=make _ tree 1($ list,$pk,$pid,$ child,$ val[$ PK]);if(!空($ child)){ $ val[' _ child ']=$ child;} } $ tree[]=$ val;} }返回$ tree}效果截图如下:

更多关于服务器端编程语言(专业超文本预处理器的缩写)相关内容感兴趣的读者可查看本站专题: 《PHP数据结构与算法教程》 、 《php程序设计算法总结》 、 《php排序算法总结》 、 《PHP常用遍历算法与技巧总结》 、 《PHP数学运算技巧总结》 、 《PHP数组(Array)操作技巧大全》 、 《php字符串(string)用法总结》 及《php常见数据库操作技巧汇总》

希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

更多资讯
游戏推荐
更多+