热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php树形结构图实现方法,结构化的树形结构转换为扁平的分支数组如何实现?不限语言,如PHPJavaScript...

最近需要实现一个功能,需要把一个树形结构的数据打散成包含最小分支数目的数组结构。描述起来别扭,还是举栗子吧:以JavaScript为例&#

最近需要实现一个功能,需要把一个树形结构的数据打散成包含最小分支数目的数组结构。描述起来别扭,还是举栗子吧:

以 Javascript 为例:其中,id 为主键,parent 为该对象对应的父级元素ID

let tree = [

{

id:1,

parent:0,

name:'hello',

children:[

{

id:5,

parent:1,

name:'bill gate',

children:[]

},

{

id:6,

parent:1,

name:'jack ma',

children:[]

}

]

},

{

id:2,

parent:0,

name:'world',

children:[

{

id:3,

parent:2,

name:'foo',

children:[]

},

{

id:4,

parent:2,

name:'bar',

children:[]

}

]

}

];

上面的数组比较简单,因为每个元素的子元素个数和深度是一样的,但实际上的需求是变动是非常大的,最明显的使用场景是权限树,权限树涉及到的数据层级是不确定的,相邻的两个元素的子元素层级都可能会不同,这样的场景会比上面的例子复杂得多,其实这里可以考虑递归,复杂的数据结构如下:

let tree = [

{

id: 1,

parent: 0,

name: 'hello',

children: [

{

id: 5,

parent: 1,

name: 'bill gate',

children: []

},

{

id: 6,

parent: 1,

name: 'jack ma',

children: []

}

]

},

{

id: 2,

parent: 0,

name: 'world',

children: [

{

id: 3,

parent: 2,

name: 'foo',

children: [

{

id: 7,

parent: 3,

name: 'tom',

children: []

},

{

id: 8,

parent: 3,

name: 'jerry',

children: [

{

id: 9,

name: 'peter'

}

]

}

]

},

{

id: 4,

parent: 2,

name: 'bar',

children: []

}

]

}

];

上面的两个样本数组,对其进行处理后我们期望得到的结果应该分别如下:可以理解为对一个族谱进行拆分,每一个分支一个数组,这样,一个族谱有多少个分支,最终生成的数组就有多少个元素。

例子一:

[

['hello','bill gate'],

['hello','jack ma'],

['world','foo'],

['world','bar']

]

例子二:

[

['hello','bill gate'],

['hello','jack ma'],

['world','foo','tom'],

['world','foo','jerry','peter'],

['world','bar']

]

要实现这样的需求有什么比较好的算法呢?



推荐阅读
  • 在HDU 1166敌军布阵问题中,通过运用线段树数据结构,可以高效地计算指定区间的敌军数量。该算法不仅能够在限定的时间和内存条件下快速求解,还能够灵活应对动态变化的战场局势,为实时决策提供支持。 ... [详细]
  • CAS 机制下的无锁队列设计与实现 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
  • 本文深入探讨了二叉树路径和问题的算法优化方法。具体而言,给定一棵二叉树,需要找出所有从根节点到叶节点的路径,其中各节点值的总和等于指定的目标值。通过详细分析和优化,提出了一种高效的解决方案,并通过多个样例验证了其有效性和性能。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 深入探讨 JavaScript 中 async/await 的常见问题及解决方案 ... [详细]
  • 本文探讨了如何利用Java 8 Stream API 对数组进行高效排序和筛选处理。具体而言,通过 `stream()` 方法将 `listResult` 转换为流,然后使用 `sorted(Comparator.comparing())` 方法按伴随度进行降序排序,并最终收集结果。此外,还介绍了如何结合过滤条件进一步优化数据处理流程,提升代码的可读性和执行效率。 ... [详细]
  • 在CodeIgniter框架中集成新库文件的过程中,我遇到了一些困惑。具体来说,在跟随nettuts的认证教程时,对于在Welcome控制器中添加的构造函数代码,特别是关于Session的验证部分,我感到不太理解。这部分内容涉及如何确保Session已经初始化并具备相应的功能,这对于实现用户认证至关重要。为了更好地掌握这一知识点,我计划深入研究CodeIgniter的官方文档,并参考更多相关资源,以确保能够正确地集成和使用新库文件。 ... [详细]
  • PHP 数组逆序排列方法及常用排序函数详解 ... [详细]
  • 本文详细介绍了Java编程中的几种重要技巧,包括冒泡排序和选择排序这两种基础的数组排序算法。冒泡排序通过多次遍历数组,将较大的元素逐步移动到数组末尾;而选择排序则在每次遍历中选择最小的元素并将其放置在正确的位置。此外,文章还探讨了二分查找算法,该算法适用于已排序的数组,能够高效地进行查找操作。同时,文中还介绍了Java中的`Arrays`类及其常用方法,以及如何进行进制转换和装箱与拆箱操作,提供了丰富的示例和注意事项,帮助读者深入理解这些核心概念。 ... [详细]
  • 针对NOJ1102黑白图像问题,本文采用深度优先搜索算法进行详细分析与实现。该问题要求在给定的时间限制(普通Java为1000-3000毫秒)和内存限制(65536KByte)内,处理一个n×n的黑白图像。通过对图像的逐像素遍历,利用深度优先搜索算法有效地识别并标记相连的黑色区域,从而实现图像的高效处理。实验结果显示,该方法在多种测试用例中均能稳定达到预期效果,具有较高的准确性和效率。 ... [详细]
  • 利用 Spring BeanUtils 实现 JavaBean 的深度克隆与属性复制 ... [详细]
author-avatar
拍友2602882883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有