我有一个情况,我有一个包含约6,000个键/值对的数组结构。
该数组的结构如下:
从这个数据源中,我正在尝试将输出转换为:
A) 一个数组,我可以在后续功能中使用
B) 表格显示,每一行都是一个完整的链,每一列都会深入一层。如果你想到页面导航,这就是一个面包屑导航显示,其中每个节点都在下一列中。
我一直在尝试几种方法:
1)使用这个stackoverflow问题中的递归函数: https://dev59.com/enE85IYBdhLWcg3wKwKD#2915920,但是我没有能够修改它以使其适用于我的数据,其中父项可以相同。在他们的$tree示例中,左侧(键)值始终是唯一的。
我理解在他们的示例中,他们的键是子项,而值(右侧)是父项,但是对于我的数据,我仍然无法让它适用,因为在父项和子项两侧都有多个相同的项目。(想想复杂的关系,其中一篇文章可以包含在多个父类别中。)
2) 我已经尝试创建一个“基础数组”来存储唯一的父元素,然后创建一个递归函数来搜索“原始键值数组”,但这也没有完全成功。
3) 我尝试将数据保存在数据库中,因为我非常熟悉使用左/右值来访问/操作作为嵌套集的数据,但我想避免必须从数据库中进行所有的INSERT/SELECT。
4) 我尝试使用各种PHP迭代器类,因为我已经成功地用它们来处理文件系统和构建文件/目录列表,所以我一直在玩RecursiveArrayIterator / ParentIterator/ArrayIterator,但似乎无法找到正确的语法。
我知道对于这么大的数据集,递归可能不如使用引用高效,但它似乎提供了最大的灵活性,只是我无法正确地进行递归迭代。
除了这个具体问题之外,我还想更好地理解编程递归的算法性质。
我越是阅读其他人的代码示例,他们试图使用不同的数据结构来做类似的事情,我就越感到困惑。
如果有人能帮我指明方向,我会很感激。 澄清说明
该数组的结构如下:
Array
(
[0] => Array
(
[parent] => parentA
[name] => child1
)
[1] => Array
(
[parent] => parentB
[name] => childC
)
[2] => Array
(
[parent] => parentA
[name] => child2
)
[3] => Array
(
[parent] => parentC
[name] => child3
)
[4] => Array
(
[parent] => child1
[name] => child4
)
[5] => Array
(
[parent] => child4
[name] => child5
)
从这个数据源中,我正在尝试将输出转换为:
A) 一个数组,我可以在后续功能中使用
B) 表格显示,每一行都是一个完整的链,每一列都会深入一层。如果你想到页面导航,这就是一个面包屑导航显示,其中每个节点都在下一列中。
我一直在尝试几种方法:
1)使用这个stackoverflow问题中的递归函数: https://dev59.com/enE85IYBdhLWcg3wKwKD#2915920,但是我没有能够修改它以使其适用于我的数据,其中父项可以相同。在他们的$tree示例中,左侧(键)值始终是唯一的。
我理解在他们的示例中,他们的键是子项,而值(右侧)是父项,但是对于我的数据,我仍然无法让它适用,因为在父项和子项两侧都有多个相同的项目。(想想复杂的关系,其中一篇文章可以包含在多个父类别中。)
2) 我已经尝试创建一个“基础数组”来存储唯一的父元素,然后创建一个递归函数来搜索“原始键值数组”,但这也没有完全成功。
3) 我尝试将数据保存在数据库中,因为我非常熟悉使用左/右值来访问/操作作为嵌套集的数据,但我想避免必须从数据库中进行所有的INSERT/SELECT。
4) 我尝试使用各种PHP迭代器类,因为我已经成功地用它们来处理文件系统和构建文件/目录列表,所以我一直在玩RecursiveArrayIterator / ParentIterator/ArrayIterator,但似乎无法找到正确的语法。
我知道对于这么大的数据集,递归可能不如使用引用高效,但它似乎提供了最大的灵活性,只是我无法正确地进行递归迭代。
除了这个具体问题之外,我还想更好地理解编程递归的算法性质。
我越是阅读其他人的代码示例,他们试图使用不同的数据结构来做类似的事情,我就越感到困惑。
如果有人能帮我指明方向,我会很感激。 澄清说明
- 将会有多个层次。
- 已经指出,数据结构可以被视为有向无环图,这是完全有道理的。