Jump to content
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?

 

 

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mateus.andriollo
      Tenhos duas tabelas Cab e Itm, gostaria de listar s sequencia de cab e inserir em um array os itens pertencentes a elas, compo incomum idcab.
       
      Não consigo fazer, o array será para json
    • By lezão
      Boa tarde, galera!
      Tudo bem com vcs?
       
      Estou precisando de uma limitador de palavras.
      Tenho um texto de 600 palavras e gostaria de que na pagina principal aparece se, apenas 30 palavras do texto.
      Achei esse codigo na innternet, mas ele não limita palavras, mas sim ele corta as palavras ficando assim:  "Tenho um texto de 600 palav..."
      ?php echo substr("$texto;", 0, 200); ? com uma variavel que limita as palavras ficaria assim: "Tenho um texto de 600 palavras". exibiria essas 6 palavras.
    • By adamo marinho
      Estou tentando achar numeros iguais dentro de arrays criadas usando a função array_intersect, porem para facilitar o meu projeto, precisaria incluir variaveis dentro das arrays, alguem pode ajudar por favor?

      <?php $v1_1 = 1; $v1_2 = 2; $v1_3 = 3; $v1_4 = 4; $v1_5 = 5; $v1 = array($v1_1, $v1_2, $v1_3, $v1_4, $v1_5); $v2_1 = 6; $v2_2 = 7; $v2_3 = 8; $v2_4 = 9; $v2_5 = 10; $v2 = array($v2_1, $v2_2, $v2_3, $v2_4, $v2_5); $v3_1 = 10; $v3_2 = 9; $v3_3 = 8; $v3_4 = 7; $v3_5 = 6; $v3 = array($v3_1, $v3_2, $v3_3, $v3_4, $v3_5); $v4_1 = 5; $v4_2 = 4; $v4_3 = 3; $v4_4 = 2; $v4_5 = 1; $v4 = array($v4_1, $v4_2, $v4_3, $v4_4, $v4_5); $resultado = array_intersect($v1, $v2, $v3, $v4 ); var_dump($resultado); ?>
    • By manolegal
      Bom dia
      Tenho um formulário onde o usuário seleciona vários registros para gravar no BD. Os dados estão sendo gravados corretamente (vários registros ao mesmo tempo).
      O problema é o seguinte: tenho um dado de TOTAL DE PEDIDOS, um dado de NUMERAÇÃO INICIAL e um dado de NUMERAÇÃO FINAL.
      As numerações inicial e final são definidas de acordo com o TOTAL DE PEDIDOS. Exemplo: TOTAL DE PEDIDOS -> 5, INICIAL -> 1, FINAL -> 5.
      O detalhe é que essa numeração (Inicial e Final) deve ser sequencial.
      Supondo que já exista este dado no BD (TOTAL DE PEDIDOS -> 5, INICIAL -> 1, FINAL -> 5), e supondo que serão inseridos 02 novos registros na tabela, sendo ambos com 10 PEDIDOS. Neste caso, no primeiro registro inserido, a NUMERAÇÃO INICIAL deve ser 6 e a NUMERAÇÃO FINAL deve ser 15; e o segundo registro inserido deve ser NUMERAÇÃO INICIAL igual a 16 e NUMERAÇÃO FINAL igual a 25. Problema que para ambos os registros, está calculando o valor INICIAL como 6 e valor FINAL como 15.
      Como faço para realizar o cálculo corretamente, para que a cada registro seja calculado o valor correto da NUMERAÇÃO INICIAL? Para definição deste valor inicial, faço select no BD para pegar a maior numeração existente, porém o sistema pega este valor e atribui o primeiro valor encontrado para todos os registros, sendo que preciso que a cada lançamento este valor seja atualizado para cálculo da numeração do registro seguinte.
       
    • By Luiz Henrique
      Olá pessoas,
       
      Como faço para criar um array multidimensional?
      É uma busca e os dados recebo de um arquivo json armazeno em um array usando um foreach e o strpos para verificar se a busca existe, então fiz isso:
       
       
      //$data é o arquivo json $array = array(); foreach($data as $key => $value){  if(strpos(...)){ $array['id'][] = $value->id; $array['nome'][] = $value->nome; $array['valor'][] = $value->valor; } }  Porém isso me retorna 
       
      id' => array (size=3) 0 => int 1 1 => int 2 2 => int 3 'nome' => array (size=3) 0 => string 'teste1' 1 => string 'teste2' 2 => string 'teste3' 'valor' => array (size=3) 0 => float 28 1 => float 30 2 => float 35  Mas preciso dele neste formato
        
      array (size=3) 0 => public 'id' => int 1 public 'nome' => string 'teste1' public 'valor' => float 28 1 => public 'id' => int 2 public 'nome' => string 'teste2' public 'valor' => float 30 2 => public 'id' => int 3 public 'nome' => string 'teste3' public 'valor' => float 35 E não consigo fazer de forma alguma !
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.