我已经从平面 php 数组创建了一棵树,现在我想从主树中获取子树,我想传递子 id 并获取子项的树

$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$tree = getchildtree($flat, '101');
print_r($tree);

#1楼 票数:1 已采纳

<?php

$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$index = array_search($user_id, array_column($data, 'id'));
$new = array();
foreach ($flat as $a){
    $new[$a['parent_id']][] = $a;
}
$tree = createTree($new, array($data[$index]));
print_r($tree);

function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['id']])){
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;
}

检查演示

#2楼 票数:1

<?php
$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$index = array_search(101, array_column($flat, 'parent_id'));

var_dump($flat[$index]);

?>

一个想法:

既然你自己构建数组,为什么不考虑一个类似于

$flat[$parent_id][] = [
   'id' => $child_id,
   'name' => $child_name
];

然后你可以从主树中获取子树,如下所示

$child_tree = $flat[$parent_id];

  ask by Kabeer Hussain translate from so

未解决问题?本站智能推荐:

2回复

PHP树更改父结构

我想以其他方式像Wordpress更改父级的结构,如果是父级则添加类。 当前结构: 我想要的是: 码:
2回复

从PHP中的完整路径创建文件树

我正在尝试从完整路径字符串制作某种文件树。 这就是我使用的php类给我的: 我以为我可以做一个像这样的数组: 最后使用<li>或<table>获得此结果: 我坚持这样做是因为我有点困惑,当然我不是开发人员。 也许还有另一种方法可以做到这
1回复

如何根据级别数计算结果以将单词放入树视图中?

我有一个问题来计算树的每个级别。 例如,我在树状视图的第一行,所以我是 1 级,比我的下线是 2 级,我下线的下线是 3 级等等。 我的问题是如何将每个级别编号更改为单词放入我的树视图中。 下面是我的编码: 我的输出如下图所示,它可以将数字显示为单词,但在每个级别中获取的数字是错误的: 其
1回复

PHP mysql 树子节点计数和列出所有子节点级别明智

我有一棵树像 我想要请求 ID 的输出,例如 Admin 我的表结构是 我有一个方法可以按级别返回子计数,但我也想按级别返回子列表,并像需要第二个图像输出那样按级别返回子列表。 }
1回复

PHP:以树形结构保存数据

我有一个看起来很不错的Excel: 如果我读了它(编辑:我使用PHPExcel) ,则每行都会得到一个如下所示的Array: 现在,我有多个Excel文件,每个文件具有不同的列数。 我试图找到一种方法,将一个Excel的多个$ row-Arrays解析为一个具有树结构或
2回复

如何在没有javascript的情况下使用php列出目录以浏览文件夹? [关闭]

我在寻找这个PHP函数: 列出目录,递归 浏览文件夹的功能 没有JavaScript 通过网络地址“?p = 2 | 1”或类似内容进行导航 按类型然后按名称排序
1回复

从具有重复子树的嵌套列表构造树视图(使用anytree / treelib)

我有一个如下的嵌套列表: 我想构造一棵像这样的树: 我想使用两个软件包之一: treelib和anytree 。 我已经阅读了许多帖子,尝试了许多不同的方法,但没有使它起作用。 更新: 我想出了以下方法,但现在遇到的问题是 (当列表中有很多列表时)不能保证
1回复

获取树中节点的祖先

我的树看起来像这样。 我需要获取给定节点的所有祖先。 一个节点可以有多个子节点,而每个子节点又可以是父节点。 我的代码看起来像这样,这总是返回未定义的。 请指教。