Php 通过父级和id的引用构建树
虽然我遇到了很多解决方案,但大多数都是基于递归的。如果有人能解释并将此函数从递归转换为php引用,我将不胜感激Php 通过父级和id的引用构建树,php,arrays,recursion,multidimensional-array,reference,Php,Arrays,Recursion,Multidimensional Array,Reference,虽然我遇到了很多解决方案,但大多数都是基于递归的。如果有人能解释并将此函数从递归转换为php引用,我将不胜感激 // build tree for Tree users function buildTree(array $elements, $parentId = 0) { $branch = array(); foreach ($elements as $element) { if ((string)$element['parent_id'] === (st
// build tree for Tree users
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ((string)$element['parent_id'] === (string)$parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['child'] = $children;
}
$branch[] = $element;
// depthCommissionCalc($branch);
}
}
return $branch;
}
我自己也尝试过,但无法深入到内部子级的深度,因为我真的知道php引用的概念。有许多通过php引用构建树的封闭解决方案,但它们都保留ID或父ID作为数组索引。这不是我想要的。比如这个
function create($data){
foreach($data as &$v){
// Get childs
if(isset($tree[$v['id']])) $v['child'] =& $tree[$v['id']];
// push node into parent
$tree[$v['parent_id']][$v['id']] =& $v;
// push child into node
$tree[$v['id']] =& $v['child'];
}
// return Tree
return $tree[0];
}
示例数组是
$test = array(
array('id' => 1, 'name' => "a", 'parent_id' => 0),
array('id' => 3, 'name' => "b", 'parent_id' => 1),
array('id' => 2, 'name' => "c", 'parent_id' => 1),
array('id' => 8, 'name' => "d", 'parent_id' => 0),
array('id' => 4, 'name' => "e", 'parent_id' => 0),
array('id' => 5, 'name' => "f", 'parent_id' => 0),
array('id' => 6, 'name' => "i", 'parent_id' => 0),
array('id' => 7, 'name' => "j", 'parent_id' => 0),
array('id' => 11, 'name' => "k", 'parent_id' => 7),
array('id' => 9, 'name' => "l", 'parent_id' => 0),
array('id' => 10, 'name' => "m", 'parent_id' => 7),
array('id' => 12, 'name' => "n", 'parent_id' => 7),
array('id' => 13, 'name' => "o", 'parent_id' => 7),
array('id' => 14, 'name' => "p", 'parent_id' => 10),
array('id' => 15, 'name' => "q", 'parent_id' => 10),
array('id' => 16, 'name' => "r", 'parent_id' => 15),
array('id' => 17, 'name' => "s", 'parent_id' => 16),
array('id' => 18, 'name' => "t", 'parent_id' => 17),
)
如果有人能够研究它,并通过使用引用而不是递归和解释来帮助转换相同的函数,我们将不胜感激。非常感谢 可以在中找到双通道实现。每个未知的
parent\u id
成为新的根,子元素将被放置到childNodes
:
$test=array(
数组('id'=>1,'name'=>a','parent\u id'=>0),
数组('id'=>3,'name'=>b','parent\u id'=>1),
数组('id'=>2,'name'=>c','parent\u id'=>1),
数组('id'=>8,'name'=>d','parent\u id'=>0),
数组('id'=>4,'name'=>e','parent\u id'=>0),
数组('id'=>5,'name'=>f','parent\u id'=>0),
数组('id'=>6,'name'=>i','parent\u id'=>0),
数组('id'=>7,'name'=>j','parent\u id'=>0),
数组('id'=>11,'name'=>k','parent\u id'=>7),
数组('id'=>9,'name'=>l','parent\u id'=>0),
数组('id'=>10,'name'=>m','parent\u id'=>7),
数组('id'=>12,'name'=>n','parent\u id'=>7),
数组('id'=>13,'name'=>o','parent\u id'=>7),
数组('id'=>14,'name'=>p','parent\u id'=>10),
数组('id'=>15,'name'=>q','parent\u id'=>10),
数组('id'=>16,'name'=>r','parent\u id'=>15),
数组('id'=>17,'name'=>s','parent_id'=>16),
数组('id'=>18,'name'=>t','parent\u id'=>17),
);
$forest=_transformResultToForest($test,'id','parent_id');
印刷(森林);
输出为:
Array
(
[1] => Array
(
[name] => a
[childNodes] => Array
(
[3] => Array
(
[name] => b
[childNodes] => Array
(
)
)
[2] => Array
(
[name] => c
[childNodes] => Array
(
)
)
)
)
[8] => Array
(
[name] => d
[childNodes] => Array
(
)
)
...
嗨,谢谢你的努力,我会尽快检查和测试它!我仍然很忙,但我想我会给你+1,因为这是一个很好的发现,尽管我的问题是关于递归函数的对话和解释