Ir para conteúdo

Arquivado

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

MalCriada

Problema com foreach duplo

Recommended Posts


Boa noite!!!


Tenho um scritp que lê o arquivo de retorno cnab240 do banco.

Gostaria de printar o valor pago pelo cliente, mas ele está exibindo sempre apenas o primeiro valor pago e repetindo esse valor nas faturas seguintes.

A exibição do número da fatura paga está correta, só me perdi na necessidade da leitura de outra linha onde é exibido o valor pago em cada fatura.

O problema está no segundo foreach, já que o primeiro está funcionando corretamente e mostra todas as faturas.


O arquivo de retorno tem duas linhas para cada boleto compensado.

Na primeira linha mosta o número do documento que no caso é o número da fatura e na segunda outros itens, dentre eles o valor pago.


Podem me dar uma luz?? Deixo abaixo a parte problemática do código.




<?
while (!feof ($aponta)) {
$linha = fgets($aponta, 9999);
if(strpos($linha,'T')==true){ // pega a linha com a letra T
$newline[] = explode(" ",$linha);
}
if(strpos($linha,'U')==true){ // pega a linha com a letra U
$newline2[] = explode(" ",$linha);
}
}
foreach ($newline as $v) {
if(strlen($v[1])==37){
$nossonumero = (int) substr($v[1], 22,-6);
$datapagamento = date('Y-m-d');

foreach ($newline2 as $v2) {
$u_v_pago = substr($v2[1],77,15);
$valorpago = formataNumero($u_v_pago);
}

//
$i++;
if($i % 2 == 0){
$cor = 'style="background:#fff"';
}else{
$cor = 'style="background:#f4f4f4;"';
}

echo $nossonumero;
echo $valorpago;

}
}

?>



Obrigada pela atenção!!! :coolio:


Compartilhar este post


Link para o post
Compartilhar em outros sites

olá analisando assim por alto me parece que você tem que colocar o segundo laço dentro do primeiro pois me parece que o segundo laço deve ser rodado em cada volta do primeiro não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá analisando assim por alto me parece que você tem que colocar o segundo laço dentro do primeiro pois me parece que o segundo laço deve ser rodado em cada volta do primeiro não é?

 

obrigada @marsolim ... é isso mesmo, o segundo deve ser rodado a cada volta do primeiro... eu já tentei, mas não tá dando certo... Quando mudo e coloco o segundo rodando dentro do primeiro fica tudo desordenado e os resultados são exibidos de forma repetida e o valor pago não é exibido corretamente na sua respectiva fatura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou limpar as variáveis do segundo laço depois de cada volta do primeiro laço? algo tipo

$variável = "";

while(condição aqui){
    foreach(os dados aqui){
        $variavel = "dado da variável";
    }
    $variável = ""; // limpa a variável para receber os dados da próxima volta.
}

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.