gpt4 book ai didi

PHP 通过遍历嵌套树模型构建数组

转载 作者:行者123 更新时间:2023-11-29 14:43:13 25 4
gpt4 key购买 nike

我有一个典型的嵌套树模型,我想根据级别或深度构建一个带有“子”数组的数组,但它似乎对我不起作用。这是我现在拥有的:

while($this->tax->getTreeNext($nodes)) 
{

$level = $this->tax->getTreeLevel($nodes);

if($level != 0){
echo $level . '-' . $current_level;
if($level > $current_level){
$terms[$i] = array(
'term_id' => $terms[$i-1]['term_id'],
'name' => $terms[$i-1]['name'],
'level' => $terms[$i-1]['level'],
'children' => array(
'term_id' => $nodes['row']['term_id'],
'name' => $nodes['row']['name'],
'level' => $level,
)
);

unset($terms[$i-1]);
}else{

$terms[$i] = array(
'term_id' => $nodes['row']['term_id'],
'name' => $nodes['row']['name'],
'level' => $level
);
}

$current_level = $level;
$i++;
}
}

这适用于单个 child ,但如果 child 有 child 就不行了……有什么建议如何解决这个问题吗?

谢谢!

编辑:

这是似乎即将开始工作的最新版本:

function process(&$arr, &$prev_sub = null, $cur_depth = 1) {

$cur_sub = array();
while($line = current($arr)){
if($line['depth'] < $cur_depth){
return $cur_sub;
}elseif($line['depth'] > $cur_depth){


$prev_sub = $this->process($arr, $cur_sub, $cur_depth + 1 );

}else{

$cur_sub[$line['term_id']] = array('term_id' => $line['term_id'], 'name' => $line['name']);
$prev_sub =& $cur_sub[$line['term_id']];
next($arr);
}
}
return $cur_sub;
}

将树与每个节点关联的深度值传递给此树。当前的问题在于 elseif($line['depth'] > $cur_depth)。如果节点有子节点,则仅返回子节点的数组,但不包含该节点名称或 term_id。

谢谢!

最佳答案

由于我不太了解您当前的数据结构是什么样子,请看一下这个遍历树的简单示例。

$treeRoot = $this->tax->getRoot();

$result = traverse($treeRoot, 0);

function traverse($root, $level){
$arr = array();

$arr['term_id'] = $root['row']['term_id'];
$arr['name'] = $root['row']['name'];
$arr['level'] = $level;

while($child = $root->getNextChild()){
$arr['children'][] = traverse($child, $level+1);
}

return $arr;
}

因此,您从树根开始,填充数组的第一层。然后你继续处理 root 的 child ,但你会更深入一层。您执行与根完全相同的操作,填写数据并转到子项的子项。当您到达树的底部时,最后一个(祖父孙子) child 发现它没有剩下的 child ,因此它只是将自身(普通数组)返回给其父级。该父级将自身返回到其父级,依此类推,直到再次到达根。

瞧,您已经有了一个嵌套数组。通常,您会将这种结构保留为树,但由于我不知道您想要的结果到底是什么(您没有提供示例),因此请使用上面的代码作为您自己的实现的引用。

关于PHP 通过遍历嵌套树模型构建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559576/

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