Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Colegas,
Eu já li um monte sobre soma de arrays mas não estou conseguindo fazer funcionar direito...
A questão é a seguinte... estou buscando dados em um bd e em cada um dos registros eu faço uma conta e coloco no array... no fim, preciso da soma de tudo. Mas o retorno está sendo apenas do último registro.
$resultado = mysqli_query($con, "SELECT * FROM bd");
while($dados = mysqli_fetch_array($resultado)){
$valor = $dados["valor"];
$dias = $dados["dias"];
$perc = $valor/$dias;
$arr=array("$perc");
}
echo array_sum($arr);
?>
Alguma ajuda? Isso não deveria ser difícil!!!Olá /profile/27632-marcos-vin%C3%ADcius/?do=hovercard" data-mentionid="27632" href="/profile/27632-marcos-vin%C3%ADcius/" rel="">@Marcos Vinícius. Que bom que você já resolveu, mas respondendo sua questão original:
Você poderia ter, dentro do while, feito a soma da variável, assim:
$soma = 0;
while($dados = mysqli_fetch_array($resultado)){
$valor = $dados["valor"];
$soma += $valor;// se $valor for a variável que você gostaria de obter o somatório
$dias = $dados["dias"];
$perc = $valor/$dias;
$arr=array("$perc");
}
echo $soma;
O array_sum, dentro do seu contexto, faria um segundo loop, que seria muito mais lento. Além disso ele soma apenas os valores dentro de um array, como nesse exemplo:
$array = [ 10, 20, 30, 40, 50 ];
echo array_sum( $array );// 150
Mas não era seu caso, pois seu array era mais complexo.
Ao menos que você fizesse o seguinte (isso iria adicionar ainda mais loops, ou seja, não é muito recomendadável, mas seria uma opção fácil):
<?php
$array = [
[
'id' => 1,
'valor' => 10,
'nome' => 'foo'
],
[
'id' => 2,
'valor' => 20,
'nome' => 'bar'
],
[
'id' => 3,
'valor' => 30,
'nome' => 'baz'
],
];
$valores = array_column( $array, 'valor' ); * [0] => 10
* [1] => 20
* [2] => 30
* )
*/
echo array_sum( $valores );// 60
Legal @Matheus Tavares
Ficou bem simples. Resolveria!!! Mas como eu tinha bem poucos dados, pude fazer a conta antes de salvá-los.
Só uma dúvida. Eu quero a somatória dos dados $valor/$dias
Ou seja, quero a média do valor versus dias e depois somar todas as médias. Ficaria assim né?
$soma = 0;
while($dados = mysqli_fetch_array($resultado)){
$valor = $dados["valor"];
$dias = $dados["dias"];
$perc = $valor/$dias;
$soma += $perc;
}
echo $soma;Olá /profile/27632-marcos-vin%C3%ADcius/?do=hovercard" data-mentionid="27632" href="/profile/27632-marcos-vin%C3%ADcius/" rel="">@Marcos Vinícius.
>
Em 21/06/2021 at 15:19, Marcos Vinícius disse:
Ou seja, quero a média do valor versus dias e depois somar todas as médias. Ficaria assim né?
Sim, seria exatamente como você descreveu. No entanto, embora eu não seja estatístico, não vejo muita utilidade na soma das médias.
Talvez eu esteja enganado, mas acredito que você queira a média entre todas as médias, e isso você poderia conseguir assim:
$qtd = 0;
$soma = 0;
while($dados = mysqli_fetch_array($resultado)){
$valor = $dados["valor"];
$dias = $dados["dias"];
$perc = $valor / $dias;
$soma += $perc;
++$qtd;
}
echo $soma / $qtd;// média entre as médias
Resolvido... fiz a conta antes de inserir no BD e recupero já feita