所以,我的问题是,我想构建这两个表的树:
Parent table:
+-------+---------------+
| pr_id | parent_name |
+-------+---------------+
| 1 | p |
| 2 | p_0 |
| 3 | p_0_1 |
| 4 | q |
+-------+---------------+
Child table:
+-------+---------------+---------------------------+
| ch_id | pr_id | child_name |
+-------+---------------+---------------------------+
| 1 | 1 | p_0 |
| 2 | 1 | p_1 |
| 3 | 2 | p_0_0 |
| 4 | 2 | p_0_1 |
| 5 | 3 | p_0_1_0 |
| 6 | 3 | p_0_1_1 |
| 7 | 4 | q_0 |
| 8 | 4 | q_1 |
+-------+---------------+---------------------------+
树应该看起来像:
有人可以帮我解决递归解决方案吗?
为此,您不需要在数据库中创建2个表,您可以仅从一个表中进行维护,如下所示
+-------+---------------+---------------------------+
| id | parent_id | title |
+-------+---------------+---------------------------+
| 1 | 0 | Parent Page |
| 2 | 1 | Sub Page |
| 3 | 2 | Sub Sub Page |
| 4 | 0 | Another Parent Page |
+-------+---------------+---------------------------+
生成的数组将像
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[title] => Parent Page
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[title] => Sub Page
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 1
[title] => Sub Sub Page
)
)
)
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Another Parent Page
)
)
您需要使用下面的递归函数来实现它
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
该算法非常简单:
问题内容: 我必须建立一棵树,其中将包含约300个节点。该树没有深度限制。因此它可以具有3或15个级别。每个节点可以有无限数量的子代。 优先考虑的是尽可能快地获得完整的树/子树,但有时我也需要添加节点或移动节点,但并不是那么频繁。 我想知道在数据库中存储树的最佳方法以及在php中检索数据(如果可能)的最佳方法。 问题答案: 您可以使用 嵌套集模型, 因为它可以产生非常有效的查询。检出在MySQL中
题目描述 希望将上面数组用js转化成下面格式,请问如何实现呢
树形结构有两种表示方法:子表表示法(嵌套)和父指针表示法(扁平)。 Tree 将两者进行了整合,输出一个扁平的结构,一个节点既通过 pId(指向父节点的唯一标志)建立与父节点关系,又通过 children(数组,存储子节点的唯一标志)建立与子节点的关系。 一个树形结构,为了方便处理,通常需要具备以下特点: 一个扁平的数组结构很重要,在需要获取某个节点时,可以仅通过一次循环快速找到该节点。Tree
树形结构组件。 Usage 全部引入 import { TreeView } from 'beeshell'; 按需引入 import { TreeView } from 'beeshell/dist/components/TreeView'; Examples Code 详细 Code ```js import { TreeView } from 'beeshell'; const nest
扁平数组的结构如上,每个目录下都可以添加数据 如何将这个数组转成树形的结构啊,转成如下的形式 目录层级的name就取对应的 xxxLevelStr
问题内容: 我正在尝试从我的PHP和MySQL数据库中构建一个不被接受的列表菜单树。 我有一个从数据库返回的页面对象数组。每个页面对象都有parent_id属性,如果没有父对象,则将其设置为null。页面对象如下所示: 如果可能的话,我不想递归地做,只打一次数据库,因为我将在几乎每个请求上构建菜单。我想创建一个函数,将其对象数组传递给它,它将返回html列表。 问题答案: 我喜欢@mario的解决