gpt4 book ai didi

php - 在 PHP 中从平面数组构建树

转载 作者:IT王子 更新时间:2023-10-29 01:03:36 25 4
gpt4 key购买 nike

我浏览了整个互联网,但还没有完全找到我想要的东西。我有一个平面数组,每个元素都包含一个“id”和一个“parent_id”。每个元素只有一个父元素,但可能有多个子元素。如果 parent_id = 0,则将其视为根级别项。我正试图将我的平面阵列变成一棵树。我发现的其他示例仅将元素复制到父元素,但原始元素仍然存在。

编辑

起始数组的每个元素都是从一个单独的 XML 文件中读取的。如果文件没有父级,则文件本身将具有“0”作为 parent_id 的值。键实际上是字符串。

对于之前的困惑,我深表歉意。希望这更清楚:

/编辑

我的起始数组:

Array(    [_319_] => Array        (            [id] => 0            [parent_id] => 0        )    [_320_] => Array        (            [id] => _320_            [parent_id] => 0        )    [_321_] => Array        (            [id] => _321_            [parent_id] => _320_        )    [_322_] => Array        (            [id] => _322_            [parent_id] => _321_        )    [_323_] => Array        (            [id] => _323_            [parent_id] => 0        )    [_324_] => Array        (            [id] => _324_            [parent_id] => _323_        )    [_325_] => Array        (            [id] => _325_            [parent_id] => _320_        ))

生成树后的结果数组:

Array(    [_319_] => Array        (            [id] => _319_            [parent_id] => 0        )    [_320_] => Array        (            [id] => _320_            [parent_id] => 0            [children] => Array                (                    [_321_] => Array                        (                            [id] => _321_                            [parent_id] => _320_                            [children] => Array                                (                                    [_322_] => Array                                        (                                            [id] => _322_                                            [parent_id] => _321_                                        )                                )                        )                    [_325_] => Array                        (                            [id] => _325_                            [parent_id] => _320_                        )                )    [_323_] => Array        (            [id] => _323_            [parent_id] => 0            [children] => Array                (                    [_324_] => Array                        (                            [id] => _324_                            [parent_id] => _323_                        )                )        )

非常感谢任何帮助/指导!

到目前为止我的一些代码:

        function buildTree(array &$elements, $parentId = 0) {        $branch = array();        foreach ($elements as $element) {            if ($element['parent_id'] == $parentId) {                $children = $this->buildTree($elements, $element['id']);                if ($children) {                    $element['children'] = $children;                }                $branch[] = $element;            }        }        return $branch;    }

最佳答案

你忘记了里面的 unset() 兄弟。

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['id']] = $element;
unset($elements[$element['id']]);
}
}
return $branch;
}

关于php - 在 PHP 中从平面数组构建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com