-1

ツリーの配列を再帰的に作成しようとしていますが、冗長なエラーが表示されています。コードは次のとおりです

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
4

1 に答える 1

0

最初のレイヤー (レベル 0) で繰り返しが発生した場合、最初の行の$categorias = Categoria::model()->findAll("id_pai =".$parentid );せいになります。parentid = 0 の場合、繰り返しになります。

于 2012-09-27T21:41:18.753 に答える