首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecursiveParentChildIterator --类似于RecursiveDirectoryIterator

RecursiveParentChildIterator --类似于RecursiveDirectoryIterator
EN

Stack Overflow用户
提问于 2010-04-29 14:48:16
回答 1查看 463关注 0票数 1

有很多使用RecursiveIterator来夷平树结构的例子。但是用它炸掉树结构呢?

是否有一种优雅的方法可以使用此库或其他一些SPL库递归地构建树(read:将平面数组转换为任意深度的数组)?

代码语言:javascript
复制
SELECT id, parent_id, name FROM my_tree

编辑:,您知道如何使用目录完成此操作吗?

代码语言:javascript
复制
$it = new RecursiveDirectoryIterator("/var/www/images");
foreach(new RecursiveIteratorIterator($it) as $file) {
    echo $file . PHP_EOL;
}

。。如果你能做这样的事:

代码语言:javascript
复制
$it = new RecursiveParentChildIterator($result_array);
foreach(new RecursiveIteratorIterator($it) as $group) {
    echo $group->name . PHP_EOL;
    // this would contain all of the children of this group, recursively
    $children = $group->getChildren();
}

:结束编辑

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-29 17:06:32

虽然不是SPL,但您可以使用引用(&)构建一个使用本地PHP的树:

代码语言:javascript
复制
// untested
$nodeList = array();
$tree     = array();
foreach ($result as $row) {
    $nodeList[$row['id']] = array_merge($row, array('children' => array()));
}
foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent_id'] || !array_key_exists($node['parent_id'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent_id']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2738278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档