我有一個典型的嵌套樹模型,我想根據水平或深度構建一個包含'children'數組的數組,但它似乎不適合我。這是我現在有:PHP構建數組遍歷嵌套樹模型
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。
謝謝!
遞歸而不是迭代。 – usoban
不太確定我明白了......你能舉一個例子嗎? – dzm
你能否詳述一下你的數據結構?你的樹是如何定義和存儲的? –