Mehow 1 Denunciar post Postado Junho 30, 2010 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 Oliveira 331 Denunciar post Postado Julho 1, 2010 http://br2.php.net/manual/pt_BR/function.array-sum.php Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Julho 1, 2010 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
Evandro Oliveira 331 Denunciar post Postado Julho 1, 2010 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
Mehow 1 Denunciar post Postado Julho 1, 2010 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