Ir para conteúdo
eiwes

Erro na junção de array com foreach

Recommended Posts

Fiz uma iteração foreach para gerar categorias e subcategorias, pois não queria fazer DOIS SELECTS, ficando assim:

 

//----> Foreach para gerar a categoria, pois são vários items com as mesmas chaves, portanto agrupo
		foreach($exibeLista as $row){
            $dlD[$row["nameD"]][] = [
              "nameD"=>$row["nameD"],
              "idD"=>$row["idD"],
              "qtdR"=>$row["qtdR"],
              "qtdF"=>$row["qtdF"]
            ];
          }

//----> Foreach para gerar subcategorias
          foreach($exibeLista as $row){
            $dLA[$row["nameP"]][] = [
              "nameD"=>$row["nameD"],
              "idD"=>$row["idD"],
              "idAss"=>$row["idAss"],
              "idT"=>$row["idT"],
              "nameP"=>$row["nameP"],
              "qtdR"=>$row["qtdR"],
              "qtdF"=>$row["qtdF"]
            ];
          }


          $fsHTML = [];
          $rateD = 0;
          $qtdAss = 0;

          if(is_array($dlD) || is_object($dlD)){
            foreach ($dlD as $key => $ds) {

              if ($key <> '' && $key <> NULL) {
                $rateD += (($ds[0]["qtdR"]*100)/$ds[0]["qtdF"]);
                $qtdAss += count($dlD[$key]);
	
//----> Array para inserir HTML da Categoria criada e criar accordion
                    $fsHTML[] = '
                    <div class="col-md-12 col-sm-12 col-xs-12">
                      <div class="x_panel overflow_hidden padding-into-row-qsts bg-white-row filtro-on">
                        <span class="rateD">'.ceil($rateD/$qtdAss).'%</span>
                        <span class="opcao-into-top">'.$ds[0]["idD"].' - '.$ds[0]["nameD"].' 
                          <a class="collapse-link open-filter-qsts border-radius8"><i class="fa fa-chevron-up"></i></a></span>
                        <div class="x_content" style="display:none;padding-top:10px">
                          <div class="accordion" id="accordion" role="tablist" aria-multiselectable="true">
                    ';
                            
//----> Verificar se a subcategoria contém a categoria, se contém é incluída na array
                            
                foreach ($dLA as $keys => $ass) {
                  if($ass[0]["idD"] == $ds[0]["idD"] ){
                    if($ass[0]['idT'] <> 0){ $link = 't='.$ass[0]['idT']; }else{ $link = 'a='.$ass[0]['idAss'];}
                    $fsHTML[] = '
                    <div class="panel">
                      <a class="panel-heading collapsed" href="/v/fs/st?mz=y&type=c&'.$link.'">
                        <span class="eficiencia-accordion">'.ceil(($ass[0]['qtdR']*100)/$ass[0]['qtdF']).'%</span>
                        <h4 class="panel-title">'.$ass[0]['nameP'].'</h4>
                        <span class="unicamente">'.$ass[0]['qtdR'].' respondido de '.$ass[0]['qtdF'].'</span>
                      </a>
                    </div>
                    ';
                  }//if ass
                }//foreach ass
              }//if ds
                            
//----> Aqui é aonde ocorre o ERRO! Era pra fazer o fechamento do Accordion e gerar uma nova DIV. 
//No índice [0] isso ocorre normalmente, porém no [1] ela agrupa todos os accordions. (abaixo farei a amostra)
                            
                    $fsHTML[] = '</div></div></div></div>';
            }//foreach ds
          }//if verifica se é array e se é objeto
          
                  return implode('', array_unique($fsHTML));

O correto seria assim:

 

- Categoria

  - Subcategoria

  - Subcategoria

 

- Categoria

 - Subcategoria

 - Subcategoria

 

 

Como está acontecendo:

 

- Categoria

  - Subcategoria

  - Subcategoria

 

- Categoria

  - Subcategoria

  - Subcategoria

    - Categoria

      - Subcategoria

      - Subcategoria

        - Categoria

          - Subcategoria

          - Subcategoria

            - Categoria

              - Subcategoria

              - Subcategoria

 

 

Não consigo entender de jeito nenhum pq o primeiro fecha corretamente e a partir do segundo não.

Alguém me ajuda?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Williams Duarte disse:

 

Então, Williams. Agradeço muito pelo link, porém, gostaria de entender o porquê desse erro.

 

Saberia me ajudar com isso? Pois estou encabulado tentando entender: no primeiro laço do array ele conclui com o fechamento e após ele não faz o fechamento.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Giovanird
      Tenho uma tabela com a coluna média (valor decimal) .
       
      cod | media | cod_sala 1 1,98 5 2 2,34 2 3 1,32 5 4 2,51 3 5 1,65 1 6 2,78 5 7 4,95 4 8 0,75 4 9 1,23 1 10 1,63 2 11 1,55 3 Preciso no select MYSQL ou dentro do foreach multiplicar os valores do campo média, de acordo com o fitro por cod_sala
      Exemplo pelo cod_sala: 5
      Sendo o resultdo final: 1,98 * 1,32 * 2,78 = 7,26

      Desde já agradeço!
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
×

Informação importante

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