Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Julio Bêtta

[Resolvido] Array com keys duplicadas

Recommended Posts

Olá pessoal.. tenho esse array:

Array
(
   [10_Teste] => Array
       (
           [11_Ciência Aplicada] => Array
               (
                   [11_Ciência Aplicada] => Array
                       (
                           [12_Bactérias e Infecção] => Array
                               (
                                   [12_Bactérias e Infecção] => Array
                                       (
                                           [conteudos] => Array
                                               (
                                                   [0] => Classificação dos Patógenos
                                                   [1] => Coloração de Gram
                                                   [2] => Como Colher uma Cultura
                                                   [3] => Defesas Contra Infecção
                                                   [4] => DNA bacteriano
                                                   [5] => Formato da Célula Bacteriana
                                                   [6] => Infecção no Olho
                                                   [7] => Parede Celular Bacteriana
                                                   [8] => Patógenos Oculares
                                                   [9] => Reprodução Bacteriana
                                               )

                                       )

                               )

                           [13_Treinamento Anti-infeccioso] => Array
                               (
                                   [13_Treinamento Anti-infeccioso] => Array
                                       (
                                           [conteudos] => Array
                                               (
                                                   [0] => A Resposta Inflamatória
                                                   [1] => Anti-infecciosos
                                                   [2] => Antibacterianos Oculares
                                                   [3] => Antivirais e Antifúngicos
                                                   [4] => Potência antibacteriana
                                                   [5] => Resistência Bacteriana
                                               )

                                       )

                               )

                       )

               )

           [21_Concorrentes] => Array
               (
                   [21_Concorrentes] => Array
                       (
                           [22_Concorrentes Primários] => Array
                               (
                               )

                           [23_Outros Concorrentes] => Array
                               (
                               )

                           [conteudos] => Array
                               (
                                   [0] => testeasdasd
                               )

                       )

               )

           [14_Teste Produto] => Array
               (
                   [14_Teste Produto] => Array
                       (
                           [20_Características e benefícios] => Array
                               (
                               )

                           [17_Contraindicações e precauções] => Array
                               (
                               )

                           [15_Descrição e Farmacologia] => Array
                               (
                               )

                           [16_Indicação e Dosagem] => Array
                               (
                               )

                           [19_Ingredientes Ativos] => Array
                               (
                               )

                           [18_Perfil de Segurança] => Array
                               (
                               )

                       )

               )

           [conteudos] => Array
               (
                   [0] => teste
               )

       )

)

 

Agora percebam os trechos em que uma chave filha tem o mesmo nome da chave pai:

 


           [11_Ciência Aplicada] => Array
               (
                   [11_Ciência Aplicada] => Array

 

Como faço para eliminar isso deste array, de modo que essas chaves filhas se tornem a chave pai.

Agradeço a atençao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta ai o script

 

function procurar($g){       
   $temp = array();
   $grupos = new Grupo();
   $grupos->where("subgrupo_de = {$g->id_grupo} AND tipo = " . GRUPO_CONTEUDOS)
          ->order("nome ASC")
          ->select("(SELECT count(*) FROM grupo a " . 
                  "WHERE a.subgrupo_de = grupo.id_grupo ) as total_subs, grupo.*, ". 
                  "(SELECT count(*) FROM conteudo b " . 
                  "WHERE b.id_grupo = grupo.id_grupo ) as total_conteudo")
         ->find();

   $grupos = $grupos->allToObject();

   foreach($grupos as $grupo){

     $temp["{$g->id_grupo}_{$g->nome}"]["{$grupo->id_grupo}_{$grupo->nome}"] = procurar($grupo);

   }

   if($g->total_conteudo > 0){
     $conteudos = new Conteudo();
     $conteudos->where("id_grupo = {$g->id_grupo}")
                ->order("titulo ASC")
                ->find();
     foreach($conteudos->allToObject() as $conteudo){
        $temp["{$g->id_grupo}_{$g->nome}"]
             ["conteudos"][] = $conteudo->titulo;
     }
   }


   return $temp;
}

só para esclarecer, o trecho abaixo é uma consulta SQL utilizando o framework Lumine do Hugo Ferreira da Silva:

$grupos = new Grupo();
$grupos->where("subgrupo_de = {$g->id_grupo} AND tipo = " . GRUPO_CONTEUDOS)
        ->order("nome ASC")
        ->select("(SELECT count(*) FROM grupo a " . 
                 "WHERE a.subgrupo_de = grupo.id_grupo ) as total_subs, grupo.*, ". 
                 "(SELECT count(*) FROM conteudo b " . 
                 "WHERE b.id_grupo = grupo.id_grupo ) as total_conteudo")
        ->find();   
$grupos = $grupos->allToObject();

 

valeu Kratos Zohr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando por cima parece que a repetição das chaves acontece aqui

 $temp["{$g->id_grupo}_{$g->nome}"]["{$grupo->id_grupo}_{$grupo->nome}"] = procurar($grupo);

Experimente remover ["{$grupo->id_grupo}_{$grupo->nome}"]

$temp["{$g->id_grupo}_{$g->nome}"] = procurar($grupo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

com a sua sugestao fica assim:

 

Array
(
   [10_Teste] => Array
       (
           [14_Teste Produto] => Array
               (
               )

           [conteudos] => Array
               (
                   [0] => teste
               )

       )

)

 

na verdade eu ja tentei varias situacoes no trecho abaixo:

$temp["{$g->id_grupo}_{$g->nome}"]["{$grupo->id_grupo}_{$grupo->nome}"] = procurar($grupo);
//OU
$temp["{$g->id_grupo}_{$g->nome}"] = procurar($grupo);
//OU
$temp["{$grupo->id_grupo}_{$grupo->nome}"] = procurar($grupo);

 

o resultado nunca é o que eu quero, ou seja, sem as chaves filhas iguais as chaves pai.. algo como:

Array
(
   [10_Teste] => Array
       (
           [11_Ciência Aplicada] => Array
               (
                    [12_Bactérias e Infecção] => Array
                    (                  
                                 [conteudos] => Array
                                       (
                                                [0] => Classificação dos Patógenos
                                                [1] => Coloração de Gram
                                                [2] => Como Colher uma Cultura
                                                [3] => Defesas Contra Infecção
                                                [4] => DNA bacteriano
                                                [5] => Formato da Célula Bacteriana
                                                [6] => Infecção no Olho
                                                [7] => Parede Celular Bacteriana
                                                [8] => Patógenos Oculares
                                                [9] => Reprodução Bacteriana
                                        )
######## ETC E TAL ............ ### 


 

por isso a minha primeira pergunta. obrigado pelo interesse, Kratos

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você, do jeito que estava, removesse o conteúdo da última chave, deixando-a vazia:

 

$temp["{$g->id_grupo}_{$g->nome}"][] = procurar( $grupo );

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você, do jeito que estava, removesse o conteúdo da última chave, deixando-a vazia:

 

$temp["{$g->id_grupo}_{$g->nome}"][] = procurar( $grupo );

 

nao deu ... ficou assim:

 

Array
(
   [10_Teste] => Array
       (
           [0] => Array
               (
                   [11_Ciência Aplicada] => Array
                       (
                           [0] => Array
                               (
                                   [12_Bactérias e Infecção] => Array
                                       (
                                           [conteudos] => Array
                                               (
                                                   [0] => Classificação dos Patógenos
                                                   [1] => Coloração de Gram
                                                   [2] => Como Colher uma Cultura
                                                   [3] => Defesas Contra Infecção
                                                   [4] => DNA bacteriano
                                                   [5] => Formato da Célula Bacteriana
                                                   [6] => Infecção no Olho
                                                   [7] => Parede Celular Bacteriana
                                                   [8] => Patógenos Oculares
                                                   [9] => Reprodução Bacteriana
                                               )

                                       )

                               )
######## ETC E TAL ............ ###

 

q fezes... isso ta dando dor de cabeça ja. srsrsr

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal.. resolvi o problema. abaixo :

 


  if($g->total_conteudo > 0){
     $conteudos = new Conteudo();
     $conteudos->where("id_grupo = {$g->id_grupo}")
                ->order("titulo ASC")
                ->find();
     foreach($conteudos->allToObject() as $conteudo){
        ### MUDEI ESTE TRECHO
        /*$temp["{$g->id_grupo}_{$g->nome}"]
             ["conteudos"][] = $conteudo->titulo;*/
        ### PARA
       $temp["conteudos"][] = $conteudo->titulo;
     }
   }   

 

a saida fica assim:

 

Array
(
   [10_Teste] => Array
       (
           [11_Ciência Aplicada] => Array
               (
                   [12_Bactérias e Infecção] => Array
                       (
                           [conteudos] => Array
                               (
                                   [0] => Classificação dos Patógenos
                                   [1] => Coloração de Gram
                                   [2] => Como Colher uma Cultura
                                   [3] => Defesas Contra Infecção
                                   [4] => DNA bacteriano
                                   [5] => Formato da Célula Bacteriana
                                   [6] => Infecção no Olho
                                   [7] => Parede Celular Bacteriana
                                   [8] => Patógenos Oculares
                                   [9] => Reprodução Bacteriana
                               )

                       )

                   [13_Treinamento Anti-infeccioso] => Array
                       (
                           [conteudos] => Array
                               (
                                   [0] => A Resposta Inflamatória
                                   [1] => Anti-infecciosos
                                   [2] => Antibacterianos Oculares
                                   [3] => Antivirais e Antifúngicos
                                   [4] => Potência antibacteriana
                                   [5] => Resistência Bacteriana
                               )

                       )

               )

           [21_Concorrentes] => Array
               (
                   [22_Concorrentes Primários] => Array
                       (
                       )

                   [23_Outros Concorrentes] => Array
                       (
                       )

                   [conteudos] => Array
                       (
                           [0] => testeasdasd
                       )

               )

           [14_Teste Produto] => Array
               (
                   [20_Características e benefícios] => Array
                       (
                       )

                   [17_Contraindicações e precauções] => Array
                       (
                       )

                   [15_Descrição e Farmacologia] => Array
                       (
                       )

                   [16_Indicação e Dosagem] => Array
                       (
                       )

                   [19_Ingredientes Ativos] => Array
                       (
                       )

                   [18_Perfil de Segurança] => Array
                       (
                       )

               )

       )

   [conteudos] => Array
       (
           [0] => teste
       )

)

 

Uma coisa eu aprendi disso tudo: Para entender a recursividade é preciso usar seu Dark Side of the Force. =D

Obrigado a todos. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.