Ir para conteúdo
Fórum Script Brasil
  • 0

Busca recursiva com problemas


Victor Hugo Soares

Pergunta

Eu estou montando um array de objetos para montar o menu da minha aplicação.

No momento do erro este array está desta forma:

$arrayMenu =

Array(    [0] => stdClass Object        (            [tipo_menu] => 1            [menu] => 1            [descricao] => Home            [tela] => 1            [icone] => fa-home            [controlador] => Inicio            [menu_mp] =>             [descricao_mp] =>         )    [1] => stdClass Object        (            [tipo_menu] => 1            [menu] => 2            [descricao] => Agenda            [tela] => 31            [icone] => fa-calendar            [controlador] => Agenda            [menu_mp] =>             [descricao_mp] =>         )    [2] => stdClass Object        (            [menu] => 3            [descricao] => Cadastro            [tela] =>             [icone] =>             [controlador] =>             [sub_menus] => Array                (                    [0] => stdClass Object                        (                            [tipo_menu] => 1                            [menu] => 4                            [descricao] => Tipos de Usuários                            [tela] => 12                            [icone] => fa-users                            [controlador] => TiposUsuarios                            [menu_mp] => 3                            [descricao_mp] => Cadastro                        )                    [1] => stdClass Object                        (                            [tipo_menu] => 1                            [menu] => 5                            [descricao] => Usuários                            [tela] => 2                            [icone] => fa-user                            [controlador] => Usuarios                            [menu_mp] => 3                            [descricao_mp] => Cadastro                        )                    [2] => stdClass Object                        (                            [tipo_menu] => 1                            [menu] => 6                            [descricao] => Tipos de Menus                            [tela] => 4                            [icone] => fa-list                            [controlador] => TiposMenus                            [menu_mp] => 3                            [descricao_mp] => Cadastro                        )                    [3] => stdClass Object                        (                            [tipo_menu] => 1                            [menu] => 12                            [descricao] => Telas                            [tela] => 3                            [icone] =>                             [controlador] => Telas                            [menu_mp] => 3                            [descricao_mp] => Cadastro                        )                    [4] => stdClass Object                        (                            [menu] => 13                            [descricao] => Teste                            [tela] =>                             [icone] =>                             [controlador] =>                             [sub_menus] => Array                                (                                    [0] => stdClass Object                                        (                                            [tipo_menu] => 1                                            [menu] => 15                                            [descricao] => Teste 3                                            [tela] => 7                                            [icone] => fa-camera                                            [controlador] => Teste                                            [menu_mp] => 13                                            [descricao_mp] => Teste                                        )                                )                        )                )        ))
	

Rodo a função abaixo para encontrar o menu 13 e acrescentar mais submenus nele, porém não retorna corretamente, acaba imprimindo a linha com o comando

	echo '<br /> return false <br />';
	

Função:

	function buscaMenu( array $arrayMenu, $codMenu ){
    
    $retorno = false;
    
    foreach ( $arrayMenu as $menu ){
        
        if( $menu->menu == $codMenu ){       
            
            $retorno = $menu;
            
            return $retorno;
            
        }
        
        if( $menu->sub_menus ){
            buscaMenu( $menu->sub_menus, $codMenu );
        }
    }
    
    echo '<br /> return false <br />';
	
}
	

 

Chamada da função:

	$menuPai = buscaMenu( $arrayMenu ,  13 );
	

 

Porque, dá problema?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom, consegui resolver aqui sozinho, obrigado mesmo assim.

Postarei aqui a solução, caso alguém mais passe por isso.

O problema é que não joguei no return  a chamada recursiva da função. Deveria ser assim:

function buscaMenu( array $arrayMenu, $codMenu ){
    
    $retorno = false;
    
    foreach ( $arrayMenu as $menu ){
        
        if( $menu->menu == $codMenu ){       
            
            $retorno = $menu;
            
            return $retorno;
            
        }
        
        if( $menu->sub_menus ){
            return buscaMenu( $menu->sub_menus, $codMenu );
        }
    }
	
}

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...