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 jganjos
      Boa tarde senhores.
      Estou gerando esta array com o PHP
       
      Array ( [header] => Array ( [ico] => fas fa-building [tit] => Empresa [lab] => Cadastro da Empresa ) [forms] => Array ( [RAZAO] => Array ( [tit] => Razão Social ) [NFANTASIA] => Array ( [tit] => Nome Fantasia [lin] => 1 [col] => 10 ) [STATUS] => Array ( [tit] => Status [typ] => switch [val] => 1,0 [lin] => 1 [col] => 2 ) [INSCRICAO] => Array ( [tit] => Inscrição [lin] => 2 [col] => 4 ) [IE] => Array ( [tit] => Insc. Estadual [lin] => 2 [col] => 4 ) [IM] => Array ( [tit] => Insc. Municipal [lin] => 2 [col] => 4 ) [CEP] => Array ( [tit] => CEP [lin] => 3 [col] => 4 [btn] => search ) [TIPO_END] => Array ( [typ] => hidden ) [ENDERECO] => Array ( [tit] => Endereço [lin] => 4 [col] => 9 ) [NUM_END] => Array ( [tit] => Número [lin] => 4 [col] => 3 ) [BAIRRO] => Array ( [tit] => Bairro [lin] => 5 [col] => 6 ) [COMPL] => Array ( [tit] => Complemento [lin] => 5 [col] => 6 ) [MUNICIPIO] => Array ( [tit] => Município [lin] => 6 [col] => 9 ) [UF] => Array ( [tit] => Estado [typ] => list [tab] => estados [lin] => 6 [col] => 3 ) [TEL1] => Array ( [tit] => Telefone [msk] => phone [lin] => 7 [col] => 6 ) [TEL2] => Array ( [tit] => Telefone [msk] => phone [lin] => 7 [col] => 6 ) [EMAIL] => Array ( [tit] => e-mail [typ] => email [lin] => 8 [col] => 6 ) [SITE] => Array ( [tit] => Site da empresa [typ] => website [lin] => 8 [col] => 6 ) ) ) Preciso listar os valores da Array *FORMS* e seus respectivos filhos mas não estou conseguindo utilizando o foreach.
      Alguém teria uma dica?
    • By helkton
      galera preciso criar um array que pegue os itens adicionais de cada ITEM  escolhido...
      vou tentar explicar...
      tenho uma pagina com as categorias do CARDÁPIO
      LANCHES - AÇAI - SALGADOS - PIZZAS
      CADA categoria contem seus devidos itens tipo...
      LANCHES 1-xFrango 2-xSalada 3-xBacon AÇAI 1-Copo 300ml 2-Copo 500ml 3-Copo 700ml até esta funcionando, cada item que o usuário escolher, salvo em uma S_SESSION['itens'] 
      agora vamos supor que, esses itens tenham adicionais, já criei um <?php if(){}?> e ele já faz essa verificação, então se o item LANCHES 1=XFRANGO NÃO conter adicional para ser escolhido ele simplesmente irá ser adicionado no carrinho, AGORA se o item tiver adicional para ser escolhido, irá abrir um MODAL com os adicionais disponíveis para o ITEM
      Agora digamos que o AÇAÍ) 1-COPO 300ML tenha adicional eu abro o meu modal com os seguintes adicionais:
      FRUTAS 1-Morango 1,00 2-Banana 1,00 3-Uva 1,00 COMPLEMENTOS 1-Ninho 1,00 2-Coco Ralado 1,00 3-Castanha 1,00 COBERTURA 1-Chocolate 1,00 2-Leite condensado 1,00 3-Morango 1,00 ADICIONAIS 1-Nutella 1,00 2-Bis 1,00 3-KitKat 1,00 então como pego esses adicionais e salvo em cada ITEM escolhido pelo usuário e se possivel somar esses adicionais que tenha valores também
    • By ViniciusRamoa
      Olá, eu possuo o código:
       
      @foreach ($manga['chapters'] as $chapter) <div class="manga-chapter" > <h6 class="events-subtitle" style="left: -165px; top: 30px; position: relative;"> {{ link_to_route('front.manga.reader', "≫"." ".$chapter['chapter_name'], [$manga['manga_slug'], $chapter['chapter_slug']]) }} </h6> </div> @endforeach Mas ele acaba exibindo muitos itens, eu gostaria de limitar para apenas 5 itens, e que esses 5 itens, o menor fosse "apagado" e aparecesse o mais recente, exemplo:

      Atualmente:
      Item 5
      Item 4
      Item 3
      Item 2
      Item 1

      Quando um novo item for publicado, ficaria:
       
      Item 6
      Item 5
      Item 4
      Item 3
      Item 2

      Agradeço a ajuda, se puder pelo menos indicar um caminho, já ajuda muito, estou perdido aqui
       
    • By helkton
      oi galera, seguinte preciso salvar os dados de um carrinho no banco de dados
      olha só como fiz a gambiarra, me ajudem a consertar rsss
      array_map ( function ($id,$qdade,$valor) { echo 'idProd '.$id; echo ' qdadeProd '.$qdade; echo ' valorProd '.$valor; echo '<br>'; },$idProduto, $qdadeProduto, $valorProduto); já tenho os dados gravados no banco em um carrinho temporario agora depois que o cliente finalizar o pagamento eu quero jogar esses dados na tabela pedidos
      a saida esta pegando esses devidos valores $id - $qdade e $valor certinho mais não consigo jogar no banco de dados
    • By Manoel010953
      Bom Dia pessoal, tudo bom? Sou novo em programação e estou tentando criar uma dll no delphi. 
      Essa dll vai ser usada em uma aplicação do delphi também.
      Queria saber se é possível utilizar vetores e matrizes e como fazer isso pois eu tentei declarar como um array of array of (um tipo), mas dá erro (essas matrizes seriam parâmetros da função). Colocando só como array of (um tipo) funciona, mas ao tentar acessar a função na dll dá um access violation. Eu já havia criado essa função dentro da minha aplicação e estava funcionando, mas na dll da esse erro. Eu tentei usar um ponteiro também, mas continua dando o erro. Por favor me ajudem.
      Segue o código:
       
      library NDC_Generator; uses SysUtils, Dialogs, Classes; Type Matriz = Array of array of string; P1 = ^Matriz; {$R *.res} procedure MensagemConfirmacao(AMensagem: WideString); stdcall; begin MessageDlg(AMensagem, mtInformation, [mbOk], 0); end; function gerarcombinacoes(Mat: P1; Xb, Total, np, NumCri: integer; mp, bud: Double; Pointer: P1): string; stdcall; var i, j, k, T, a, p: integer; aux1: string; R0: Double; vetop, vmax: array of integer; matrizaj: array of array of integer; vetmax, vetmin: array of Double; vet_aux, Vetname: array of string; matrizaux1 : array of array of Double; matriz_result: array of array of String; begin setlength(vetop, np); setlength(vmax, np); setlength(matrizaj, T, np); setlength(vetmax, NumCri); setlength(vetmin, NumCri); setlength(vet_aux, T); p := 0; for i := 0 to np - 1 do begin vmax[np - i - 1] := Xb - i; end; for i := 0 to np - 1 do vetop := i + 1; vetop[np - 1] := np - 1; for i := 0 to NumCri - 1 do begin vetmin := 100000; vetmax := -1; end; i := 0; T := 0; while (T < Total) do // Gerar as combinações com np elementos begin if T <> 1 then i := np; while (i > 0) do // Verifica se alguma das posições já atingiu seu máximo begin if (i - 1) <> 0 then // Verifica se não se trata da primeira posição que atingiu seu máximo begin if (vetop[i - 1] = vmax[i - 1]) and (vetop[i - 2] < vmax[i - 2]) then begin vetop[i - 2] := vetop[i - 2] + 1; vetop[i - 1] := vetop[i - 2]; ; if (i < np) then for j := i to np - 1 do vetop[j - 1] := vetop[j - 2] + 1; vetop[np - 1] := vetop[np - 2]; break; end; // vetop end; // 0 i := i - 1; end; // while i>0 vetop[np - 1] := vetop[np - 1] + 1; R0 := 0; for k := 0 to np - 1 do R0 := R0 + StrToFloat( Mat^[vetop[k] - 1, NumCri + 1]); if R0 <= bud then begin p := p + 1; setlength(matrizaux1, p, NumCri + 1); setlength(Vetname, p); for a := 0 to NumCri - 1 do begin for k := 0 to np - 1 do matrizaux1[p - 1, a] := matrizaux1[p - 1, a] + StrToFloat( Mat^[vetop[k] - 1, a + 1] ); if (matrizaux1[p - 1, a] > vetmax[a]) then vetmax[a] := matrizaux1[p - 1, a]; if (matrizaux1[p - 1, a] < vetmin[a]) then vetmin[a] := matrizaux1[p - 1, a]; end; matrizaux1[p - 1, NumCri] := R0; a:= 0; for k := 0 to np - 1 do Vetname[p - 1] := Vetname[p - 1] + Mat^[ vetop[k] - 1,a] + ' '; end; // R0 <= Bud T := T + 1; end; // While a := 0; k := 0; for i := 0 to p - 1 do begin if mp <> 0 then for j := 0 to NumCri - 1 do begin if vetmax[j] <> vetmin[j] then begin R0 := (matrizaux1[i, j] - vetmin[j]) / (vetmax[j] - vetmin[j]); end else R0 := 1; if R0 >= mp then begin a := a + 1; end else break; end else a := NumCri; if a = NumCri then begin k := k + 1; for j := 0 to NumCri do begin setlength(matriz_result, k, NumCri + 2); matriz_result[k - 1, j+1] := floattostr( matrizaux1[i, j]); end; matriz_result[k - 1, 0]:= Vetname; end; a := 0; end; for I := 0 to k - 1 do for j := 0 to numcri + 1 do Pointer^[i,j]:= matriz_result[i,j]; MensagemConfirmacao('Foram geradas' + inttostr(k) + 'combinações!'); Result := '0'; end; exports gerarcombinacoes; end.  
×

Important Information

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