【发布时间】:2011-09-26 18:31:58
【问题描述】:
我有一个典型的嵌套树模型,我想根据级别或深度构建一个带有“子”数组的数组,但它似乎不适合我。这是我现在拥有的:
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++;
}
}
这适用于一个孩子,但如果孩子有孩子则不行...有什么建议可以解决这个问题吗?
谢谢!
编辑:
这是似乎接近工作的最新版本:
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。
谢谢!
【问题讨论】:
-
递归而不是迭代。
-
不太确定我明白了...你能举个例子吗?
-
您能详细说明一下您的数据结构吗?您的树是如何定义和存储的?
-
它使用两列 lft 和 rgt,据我所知,这几乎是一个标准的嵌套集
标签: php mysql arrays multidimensional-array