Ir para conteúdo

POWERED BY:

Arquivado

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

Mehow

[Resolvido] Somar e subtrair arrays

Recommended Posts

como faço para somar arrays que estão dentro de um laço FOR?

 

por exemplo tenho

$total_mes[$i], o $i é o indice que vai de 1 a 12 para representar os meses....

além desse array tbm tenho $total_devolvidos[$i] e $duplicatas[$i]

 

preciso fazer $total_mes - $total_devolvidos + $duplicatas para cada mes...

o total geral eu consegui, só o total de cada mês que não estou conseguindo, eu tentei usar o array_sum() mas a cada iteração ele continua somando os valores do mês anterior

 

<?php
foreach($_POST AS $key => $value) { ${$key} = $value; }
foreach($_GET AS $key  => $value) { ${$key} = $value; }

include_once("classes/db.class.php");
include_once("classes/login.class.php");
include_once("classes/diadasemana.php");

$login = new Usuario();
$login->Verifica();
                                 
?>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>.:: Intranet Futuritty ::.</title>
    <style type="text/css">   a {text-decoration:none;}   </style>
    <link href="css/style.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
</head>
<body bgcolor="#FFFFFF" link="#000000" vlink="#000000" alink="#000000" leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0">
<div align="center">
<table width="1000" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><?php include ("topo.php"); ?></td>
  </tr>
</table>
<table width="1000" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="153" height="450" align="left" valign="top">
    <?php
     include ("menu.php");
    ?>
    </td>
    <td width="850" align="center" valign="top" class="textonormal">
    <table width="181" border="0" cellpadding="0" cellspacing="0" class="textonormal">
      <tr>
        <td width="85"><strong>Digite o ano:</strong></td>
        <td width="96">
          <form  action="" method="post">
           <input name="ano" type="text" id="ano" size="4">
           <input type="submit" name="button" id="button" value="OK">
          </form>
        </td>
      </tr>
    </table>
      <strong><br>
      ANO: </strong>
    <?php 
		if(empty($ano)){
		 $ano = date('Y');
		 echo $ano;
		}else{
			$ano = $_POST['ano'];
			echo $ano;
		}
	?>
    <br>
	<table cellpadding="0" cellspacing="0" border="1" class="textonormal" width="795" style="border:1px solid #CCCCCC; border-collapse:collapse;" bordercolor="#CCCCCC">
      <thead>
        <tr>
          <td width="47" height="25" bgcolor="#999999"><div align="center"><strong>Mês</strong></div></td>
          <td width="104" bgcolor="#999999"><div align="right"><strong>Total chq</strong></div></td>
          <td width="52" bgcolor="#999999"><div align="center"><strong>Qtde chq</strong></div></td>
          <td width="100" align="center" bgcolor="#999999"><strong>Chq devolvidos</strong></td>
          <td width="115" align="center" bgcolor="#999999"><strong>Valor duplicatas</strong></td>
          <td width="90" align="center" bgcolor="#999999"><strong>Juros</strong></td>
          <td width="73" align="center" bgcolor="#999999"><strong>Consultas</strong></td>
          <td width="97" align="center" bgcolor="#999999"><strong>Dizimados</strong></td>
          <td width="97" align="center" bgcolor="#999999"><strong>Total</strong></td>
        </tr>
      </thead>
      <tbody>
      <?php 
	  	$sql = new ConectaBD();
		$sql->conecta();
		
		$classData = new Diadasemana();
		
		
		for($i = 1;$i <= 12;$i++){
			$sql->query("SELECT 
							l.`id_itens`,l.`id_lote`,l.`nro_banco`, l.`valor`, l.`valor_desconto`, l.`dias_compensacao`, 
							l.`preco_consulta`, l.`emissao`, l.`vencimento`, l.`dizimado`, l.`tipocheque`, l.`statusdevolvido`,
							DATE_FORMAT(l.vencimento,'%d/%m/%Y') as venc,DATE_FORMAT(l.vencimento,'%m') as mes 
						 FROM lote_itens l
						 WHERE DATE_FORMAT(l.vencimento, '%Y') = '".$ano."'
						 AND DATE_FORMAT(l.vencimento, '%m') = '".'0'.$i."'
						 ORDER BY DATE_FORMAT(l.vencimento, '%m')
						 ");
						 
			 $qtd_chq = $sql->numrows(); //qtd total de cheques do mês
			 $qtd_total += $qtd_chq;    //qtd total de cheques
			 while($reg = $sql->resultado()){
			
			 	 //SOMA TUDO menos os devolvidos
				  if($reg['statusdevolvido'] == "N" && $reg['nro_banco'] != "010" ){
					$total_geral += $reg['valor'];
				  }
			  	  
				  //SOMA DUPLICATAS
				  if($reg['nro_banco'] == "010"){
				   $total_dup[$i]  += $reg['valor'];
				   $total_duplicatas  += $reg['valor'];
				  } 
			  
				  //SOMA DEVOLVIDOS
				  if($reg['statusdevolvido'] == "S"){
				   $total_dev[$i]  += $reg['valor'];
				   $total_devolvidos += $reg['valor'];
				  } 
				  
				  //SOMA DIZIMADOS
				  if($reg['dizimado'] == "S"){
				   $total_dizimado[$i]  += $reg['valor'];
				   $total_dizimados_geral += $reg['valor'];
				  } 
			     
				 
				 //Total do relatório do mês
			  	 $total_mes[$i] = ($total_geral - $total_devolvidos)+$total_duplicatas;
			  
			  if($i == $i && $reg['statusdevolvido'] == "N"){
					$total[$i] +=  $reg['valor'];
			
					$total_consulta[$i] += $reg['preco_consulta'];
					$total_consulta_geral +=  $reg['preco_consulta'];
					
					$classData->getDia($reg['vencimento']);
					$coddia = $classData->codDia;
					$compensacao = $reg['dias_compensacao'];
					
					$select_feriado = mysql_query("SELECT * FROM feriados WHERE data = '".$reg['venc']."'");
					if(mysql_num_rows($select_feriado) == 0){
						 $compensacao = $reg['dias_compensacao'];
					}else{
						 $compensacao =  $reg['dias_compensacao'] + 1;
					}
					$porcentagem = $reg['valor_desconto']/100;
					
					$emissao = explode('-',$reg['emissao']);
					$vencimento = explode('-',$reg['vencimento']);
			   
					$dia_emissao = mktime(0,0,0,$emissao[1],$emissao[2],$emissao[0]);
					$venc_emissao = mktime(0,0,0,$vencimento[1],$vencimento[2],$vencimento[0]);
					$dias = $venc_emissao - $dia_emissao;
					
				   if($coddia == '0'){// se o dia for sabado acrescenta um dia
					$compensacao = $compensacao + 1;
					$dias = $dias / (60 * 60 * 24);
					$dias = abs($dias);
					$dias = floor($dias);
				   }
				   elseif($coddia == '6'){// se o dia for domingo acrescenta dois dias
					$compensacao = $compensacao + 2;
					$dias = $dias / (60 * 60 * 24);
					$dias = abs($dias);
					$dias = floor($dias);
				   }
				   else{
					$dias = $dias / (60 * 60 * 24);
					$dias = abs($dias);
					$dias = floor($dias);
				   }
	
					$dias_comp = $dias + $compensacao;
					$total_dia = ($reg['valor'] * $porcentagem) / 30;
					
					$total_juros = $total_dia * $dias_comp;
	
					$juros_total[$i] += $total_juros;
					$juros_total_geral +=  $total_juros;
			   }
			    
	
				$total_relatorio = ($total_geral - $total_devolvidos)+$total_duplicatas;
			}//fim while
	  ?>
      <tr>
      	<td height="25" align="center" bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>"><?php echo "<strong>".$classData->getMes("0".$i)."<strong>"; ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right">
		<?php 
		echo "R$ ".number_format($total[$i],2,',','.'); 
		?>
        </td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="center"><?php echo $qtd_chq ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($total_dev[$i],2,',','.') ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($total_dup[$i],2,',','.') ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($juros_total[$i],2,',','.') ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($total_consulta[$i],2,',','.') ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($total_dizimado[$i],2,',','.') ?></td>
        <td bgcolor="<?php if($i % 2){ echo "#F0F0F0";}?>" align="right"><?php echo "R$ ".number_format($total_mes[$i],2,',','.') ?></td>
      </tr>
     <?php 
	 } 
	 $sql->fechar();
	 ?>
      </tbody>
      <tfoot>
      	<tr>
        <td height="25" bgcolor="#B9E3FF" align="center"><strong>Total:</strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_geral,2,',','.') ?></strong></td>
        <td bgcolor="#B9E3FF" align="center"><strong><?php echo $qtd_total ?></strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_devolvidos,2,',','.') ?></strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_duplicatas,2,',','.') ?></strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($juros_total_geral ,2,',','.') ?></strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_consulta_geral,2,',','.') ?></strong></td>
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_dizimados_geral,2,',','.') ?></strong></td> 
        <td bgcolor="#B9E3FF" align="right"><strong><?php echo "R$ ".number_format($total_relatorio,2,',','.') ?></td>
       </tr>
      </tfoot>
      </table>
    </td>
  </tr>
</table>
<?php include ("rodape.php"); ?>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro ele disse que já tentou usar array_sum(), o problema é que ele tentou usar dentro do loop.

 

O comportamento é o esperado. Você tem de, dentro do loop, montar o array e fora dele aplicar a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foreach($_POST AS $key => $value) { ${$key} = $value; }
foreach($_GET AS $key  => $value) { ${$key} = $value; }

 

extract($_REQUEST);

 

Tava com sono ontem. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

o array_sum não estava funcionando porque eu estava chamando assim: array_sum($total[$i]), o certo é sem os [] array_sum($total)

 

daí como eu não estava conseguindo somar só de cada mês, a cada interação ia juntando os valores e eu não conseguia zerar o array para cada mês eu apelei e fiz um IF para cada mes e fui fazendo os calculos para cada mês XD

e no fim somei tudo

 

if($reg['mes'] == "01"){
	if($reg['nro_banco'] != "010" && $reg['statusdevolvido'] == "N" && $reg['dizimado'] == "N"){
	  $total_jan += $reg['valor'];
	}
	if($reg['statusdevolvido'] == "S"){
	  $total_dev_jan += $reg['valor'];
	}
	if($reg['nro_banco'] == "010"){
	  $total_dup_jan += $reg['valor'];
	}
	$total_geralx[$i] = ($total_jan - $total_dev_jan)+$total_dup_jan;
	$total_relatorio = array_sum($total_geralx);
}		

resolvido :lol:

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.