Total sum of a loop

0

I'm trying to make a total sum of a "for" but everything is very crazy or "zeroed" ...

<?php
    for ($i=0; $i < count($data); $i++) {

        $total_receitas_recebidas = 0;
        $total_receitas_a_receber = 0;
        $total_despesas_pagas = 0;
        $total_despesas_a_pagar = 0;

        $sinalNegativo = "";

        if(($data[$i]["tipo"]=="receita")&&($data[$i]["situacao"]=="S")){
            $cor=' style="color:green;"'; 
            $situacao="Receita recebida";
            $total_receitas_recebidas = $total_receitas_recebidas + (float) $data[$i]["valor"];
        }

        if(($data[$i]["tipo"]=="receita")&&($data[$i]["situacao"]=="N")){
            $cor=' style="color:blue;"';
            $situacao="Receita à receber";
            $total_receitas_a_receber = $total_receitas_a_receber + (float) $data[$i]["valor"];
        }

        if(($data[$i]["tipo"]=="despesa")&&($data[$i]["situacao"]=="S")){
            $cor=' style="color:orange;"';
            $situacao="Despesa paga";
            $sinalNegativo = "-";
            $total_despesas_pagas = $total_despesas_pagas + (float) $data[$i]["valor"];
        }

        if(($data[$i]["tipo"]=="despesa")&&($data[$i]["situacao"]=="N")){
            $cor=' style="color:red;"';
            $situacao="Despesa à pagar";
            $sinalNegativo = "-";
            $total_despesas_a_pagar = $total_despesas_a_pagar + (float) $data[$i]["valor"];
        }

        echo '<tr>';
        echo '<td>';echo $data[$i]["info_para_cliente"];  echo '</td>';
        echo '<td>';echo converteDataParaMostrar($data[$i]['data_vencimento']);  
        echo '</td>';
        echo '<td><p'.$cor.'><b>';echo 'R$ '.$sinalNegativo.number_format($data[$i]["valor"], 2, ',', '.'); echo '</b></p></td>';
        echo '</tr>';
    }


echo '<input type="hidden" id="total_receitas_recebidas" value="'.number_format($total_receitas_recebidas, 2, ',', '.').'">';
echo '<input type="hidden" id="total_receitas_a_receber" value="'.number_format($total_receitas_a_receber, 2, ',', '.').'">';
echo '<input type="hidden" id="total_despesas_pagas" value="'.number_format($total_despesas_pagas, 2, ',', '.').'">';
echo '<input type="hidden" id="total_despesas_a_pagar" value="'.number_format($total_despesas_a_pagar, 2, ',', '.').'">';

I made tests with a value of "150.00" x4 records but it returns "300.00" ????

obs: this is a simple cash flow, the query seeks revenue and expenses and crosses everything.

I have an equal template in another project and it works perfect ...

    
asked by anonymous 05.03.2018 / 15:08

2 answers

3

First you are instantiating the calculation variables within the for each loop ie it zeros the calculation, put the following variables out of the loop and test again:

$total_receitas_recebidas = 0;
$total_receitas_a_receber = 0;
$total_despesas_pagas = 0;
$total_despesas_a_pagar = 0;
    
05.03.2018 / 15:18
3

You are zeroing the totalizers at each step of the loop, in addition to the totalizers being cumulative, I suggest that your code looks like this:

$total_receitas_recebidas = 0;
$total_receitas_a_receber = 0;
$total_despesas_pagas = 0;
$total_despesas_a_pagar = 0;


for ($i=0; $i < count($data); $i++) {

    if(($data[$i]["tipo"]=="receita")&&($data[$i]["situacao"]=="S")){
        [...]
        $total_receitas_recebidas += $total_receitas_recebidas + (float) $data[$i]["valor"];
    }

    if(($data[$i]["tipo"]=="receita")&&($data[$i]["situacao"]=="N")){
       [...]
        $total_receitas_a_receber += $total_receitas_a_receber + (float) $data[$i]["valor"];
    }

    if(($data[$i]["tipo"]=="despesa")&&($data[$i]["situacao"]=="S")){
        [...]
        $total_despesas_pagas += $total_despesas_pagas + (float) $data[$i]["valor"];
    }

    if(($data[$i]["tipo"]=="despesa")&&($data[$i]["situacao"]=="N")){
        [...]
        $total_despesas_a_pagar += $total_despesas_a_pagar + (float) $data[$i]["valor"];
    }

    echo [...]
}

In addition, it seems to me that your $ negative variable is not required, since the number_format function preserves the original numeral signal.

    
05.03.2018 / 15:36