错误地以递归方式创建树的数组

时间:2012-09-27 21:33:38

标签: php recursion tree

我试图以递归方式创建一个树的数组,但它显示了一个冗余错误,代码是

private function printChildQuestions($parentid, $level=0) {
    $categorias = Categoria::model()->findAll("id_pai =".$parentid );

        foreach($categorias as $c){

            $space = str_repeat(' -&nbsp &nbsp ', $level);

            $flag=0;
            foreach($c->produtos as $p){

                $GLOBALS['children'][] = array("data" => $p->nome,"metadata" => array( "id" => $p->id ) );

                $flag=1;    
            }
            if($flag == 1){
                $GLOBALS['arvore'][] = array("data" => $c->nome,"metadata" => array( "id" => $c->id ) ,"children" => $GLOBALS['children'] );
            }

            $GLOBALS['arvore'][] = array("data" => $c->nome,"metadata" => array( "id" => $c->id ) );

            unset($GLOBALS['children']);
            $this->printChildQuestions($c->id,$level+1);
        }

}

该函数的调用是$ this-> printChildQuestions(0);

它将这些值归还给我:

produtos       ---- ok 
  produto1     ---- ok 
produtos       ---- wrong line , repeated 1st line
subprodutos    ---- ok
  produto 2    ---- ok
subprodutos    ---- wrong line , repeated 4th line
subsubprodutos ---- ok
  produr 3     ---- ok
  produto 3.2  ---- ok
subsubprodutos ---- wrong line, repeated 7th line
produtos3.1    ---- ok
produto 2.2    ---- ok
produtos1.2    ---- ok

正确的是

produtos       ---- ok 
  produto1     ---- ok 
subprodutos    ---- ok
  produto 2    ---- ok
subsubprodutos ---- ok
  produr 3     ---- ok
  produto 3.2  ---- ok
produtos3.1    ---- ok
produto 2.2    ---- ok
produtos1.2    ---- ok

1 个答案:

答案 0 :(得分:0)

如果在第一层(级别0)中你得到了重复,则第一行$categorias = Categoria::model()->findAll("id_pai =".$parentid );将被指责。对于parentid = 0,它会给你重复。