替代函数递归方式的无限层级分类生成树方法(php)

栏目: PHP · 发布时间: 7年前

内容简介:替代函数递归方式的无限层级分类生成树方法(php)

代码地址 : tpr_infinite_tree()

源码

function tpr_infinite_tree($data,$parent_index='parent_id',$data_index='id',$child_name='child'){
//        $data = [
//            ['id'=>1,'parent_id'=>0],
//            ['id'=>2,'parent_id'=>3],
//            ['id'=>3,'parent_id'=>1],
//            ['id'=>4,'parent_id'=>2],
//            ['id'=>5,'parent_id'=>6],
//            ['id'=>6,'parent_id'=>7],
//            ['id'=>7,'parent_id'=>5],
//        ];
        $items = [];
        foreach ($data as $d){
            $items[$d[$data_index]] = $d;
            if(!isset($d[$parent_index]) || !isset($d[$data_index]) || isset($d[$child_name])){
                return false;
            }
        }
        $tree = [];$n=0;
        foreach($items as $item){
            if(isset($items[$item[$parent_index]])){
                $items[$item[$parent_index]][$child_name][] = &$items[$item[$data_index]];
            }else{
                $tree[$n++] = &$items[$item[$data_index]];
            }
        }
        return $tree;
    }

阐释

参数

  • $data 节点list数据
  • $parent_index 父节点索引名,默认值parent_id
  • $data_index 各节点索引名,默认值id
  • $child_name 树状结构中子节点位存于父节点的属性值,默认值child

原理

根据节点id作为key值

单循环各节点,判断是否有父节点

若有父节点,则子节点绑定至父节点的child属性中

当出现a属于b,b属于c,c属于a这种死循环所属关系时,不会在$tree中体现


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员代码面试指南:IT名企算法与数据结构题目最优解

程序员代码面试指南:IT名企算法与数据结构题目最优解

左程云 / 电子工业出版社 / 2015-9 / 79.00元

这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器