1 , "pid" => 0 , 'cat' => '栏目一'), array("id" => 2 , "pid" =>" />
当前位置:首页 > 日记 > 正文

PHP实现无限极分类生成分类树的方法

PHP实现无限极分类生成分类树的方法

本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下:

现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式:

$arr = array(  array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'),  array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'),  array("id" => 3 , "pid" => 1 , 'cat' => '栏目三'),  array("id" => 4 , "pid" => 2 , 'cat' => '栏目四'),  array("id" => 5 , "pid" => 1 , 'cat' => '栏目五'),  array("id" => 6 , "pid" => 5 , 'cat' => '栏目六'),  array("id" => 7 , "pid" => 5 , 'cat' => '栏目七'),  array("id" => 8 , "pid" => 6 , 'cat' => '栏目八'),  array("id" => 9 , "pid" => 1 , 'cat' => '栏目九'),  array("id" => 10 , "pid" => 0 , 'cat' => '栏目十'),  array("id" => 11 , "pid" => 10 , 'cat' => '栏目十一'),  array("id" => 12 , "pid" => 11 , 'cat' => '栏目十二'),  array("id" => 13 , "pid" => 2 , 'cat' => '栏目十三'),  array("id" => 14, "pid" => 13 , 'cat' => '栏目十四'));

不多说,直接上处理代码:

//生成无限极分类树function make_tree($arr){  $refer = array();  $tree = array();  foreach($arr as $k => $v){    $refer[$v['id']] = & $arr[$k]; //创建主键的数组引用  }  foreach($arr as $k => $v){    $pid = $v['pid'];  //获取当前分类的父级id    if($pid == 0){      $tree[] = & $arr[$k];  //顶级栏目    }else{      if(isset($refer[$pid])){        $refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中      }    }  }  return $tree;}

测试运行:

$cat = make_tree($arr);print_r($cat);

运行结果:

Array(  [0] => Array    (      [id] => 1      [pid] => 0      [cat] => 栏目一      [subcat] => Array        (          [0] => Array            (              [id] => 3              [pid] => 1              [cat] => 栏目三            )          [1] => Array            (              [id] => 5              [pid] => 1              [cat] => 栏目五              [subcat] => Array                (                  [0] => Array                    (                      [id] => 6                      [pid] => 5                      [cat] => 栏目六                      [subcat] => Array                        (                          [0] => Array                            (                              [id] => 8                              [pid] => 6                              [cat] => 栏目八                            )                        )                    )                  [1] => Array                    (                      [id] => 7                      [pid] => 5                      [cat] => 栏目七                    )                )            )          [2] => Array            (              [id] => 9              [pid] => 1              [cat] => 栏目九            )        )    )  [1] => Array    (      [id] => 2      [pid] => 0      [cat] => 栏目二      [subcat] => Array        (          [0] => Array            (              [id] => 4              [pid] => 2              [cat] => 栏目四            )          [1] => Array            (              [id] => 13              [pid] => 2              [cat] => 栏目十三              [subcat] => Array                (                  [0] => Array                    (                      [id] => 14                      [pid] => 13                      [cat] => 栏目十四                    )                )            )        )    )  [2] => Array    (      [id] => 10      [pid] => 0      [cat] => 栏目十      [subcat] => Array        (          [0] => Array            (              [id] => 11              [pid] => 10              [cat] => 栏目十一              [subcat] => Array                (                  [0] => Array                    (                      [id] => 12                      [pid] => 11                      [cat] => 栏目十二                    )                )            )        )    ))

如果大家需要这样的组装格式,或者需要该格式方便后续的处理,可以尝试此方法

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

相关文章

word批量居中对齐

word批量居中对齐

对齐,批量,电脑软件,word,Word软件,如果我们只是把插入的一张图片居中对齐,操作很简单,选中需要居中对齐的图片,然后按下快捷键CTRL+E就OK!我们继续,如果一篇word里面插入了N张图片,那么如何一次性批量对文档里面的图片进行居中对齐操作呢?word图…

bootstrap模态框嵌套、tabindex属

bootstrap模态框嵌套、tabindex属

属性,嵌套,模态框,示例代码,电脑软件,模态框嵌套在开发中,遇到需要通过点击事件触发第一个模态框,触发后通过事件唤起第二个模态框,并且通过事件触发第三个模态框;即模态框嵌套。模态框嵌套需要用一个模态框包裹所涉及嵌套的模态框,从而点击触发…

详解phpmyadmin相关配置与错误解决

详解phpmyadmin相关配置与错误解决

错误解决,配置,详解,电脑软件,phpmyadmin,详解phpmyadmin相关配置与错误解决缺少mcrypt扩展sudo apt-get install php5-mcryptsudo php5enmod mcrypt检查:/etc/php5/apache2/conf.d/ /etc/php5/mods-available/ 中是否有mcrypt文件sudo serv…

提示此windows副本不是正版的win7

提示此windows副本不是正版的win7

副本,系统,提示,解决方法,电脑软件,windows不是正版的提示一旦出现,那就表示我们的windows需要激活。在激活之前,我们的桌面主题就会无法正常更改,哪怕换了壁纸或者主题我们的电脑显示屏依然会经常黑屏。虽然并不会影响我们使用,但是主题无法更…

jQuery阻止移动端遮罩层后页面滚动

jQuery阻止移动端遮罩层后页面滚动

移动端,遮罩层,页面,电脑软件,jQuery,css代码:.ovfHiden{overflow: hidden;height: 100%;}jquery: $(".header_right").click(function(){ $('html,body').addClass('ovfHiden'); //使网页不可滚动 $(".searchbox").show(); …

Windows Server 2003网站服务器下

Windows Server 2003网站服务器下

常见问题,网站服务器,电脑软件,Windows,Server,1,在WIN2003如何调用ASP页面如果操作系统是Windows Server 2003,安装完Internet信息服务项目(IIS),在Internet服务管理器里,选择"web服务扩展",把"Active Server Pages"设为允许。2,关于父目录 …

Excel 2016表格中如何把图表复制为

Excel 2016表格中如何把图表复制为

图表,选择,对象,方法,两种,  在使用Excel图表时,往往需要把制作好的图表复制到其他工作簿或者Word或PPT中,为了保证在复制过程中图表外观不会改变,我们可以将图表以图片的方式进行复制。以下是小编为您带来的关于Excel 2016中把图表复制为图…

Excel2007中出现加载项消失的处理

Excel2007中出现加载项消失的处理

加载,步骤,处理方法,电脑软件,  某些简装版的word(尤其是托别人重装系统后自带的word)打开后会发现在菜单中没有“加载项”这一栏,导致某些功能无法使用。今天,小编就教大家在Excel2007中出现加载项消失的处理方法。Excel2007中…

win10删除自带输入法

win10删除自带输入法

输入法,删除,自带,电脑软件,右键点击Win10系统的开始菜单,选择弹出菜单里的控制面板,如下图所示:在控制面板里面我们选择“时钟,语言和区域”里面的更换输入法,如下图所示:然后在出现的语言窗口中点击右侧的 选项,如下图所示:点击需要删…

LNMP下Nginx中文文件名或目录404无

LNMP下Nginx中文文件名或目录404无

无法访问,中文,文件名,解决方法,目录,VPS论坛里已经说过设置方法,不过貌似很多人还是会遇到中文乱码的问题,Apache可以使用mod_encoding支持中文目录和文件,LNMP下Nginx其实不需要安装额外的组件即可支持中文文件名或中文目录,下面说一下常见的…

ps如何制作一寸、二寸、六寸照片

ps如何制作一寸、二寸、六寸照片

照片,一寸,二寸,电脑软件,ps,首先要知道的照片尺寸的数量关系:6寸=10.2cm×15.2cm 1寸=2.5cm×3.5cm 2寸=3.5cm×5.3cm1.打开已经准备好的照片2.在工具栏 找到裁剪工具 (调整宽度:2.5厘米,高度:3.5厘米,分辨率:300像素) …

JS中LocalStorage与SessionStorage

JS中LocalStorage与SessionStorage

循序渐进,五种,使用方法,电脑软件,JS,localStorage和sessionStorage一样都是用来存储客户端临时信息的对象。他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。localStorage生命周…