Ir para conteúdo

Arquivado

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

joaovictorv

Somar valores dentro de um foreach

Recommended Posts

Estava querendo somar os valores dentro de um foreach,  mais ele sempre retorna pra mim os valores separados por espaço, exemplo: 20 30 40 50

gostaria de pegar todos esses valores e somar para dar o valor final 

 

segue o codigo:

<?php 
if(isset($_SESSION['carrinho'])):
$item_carrinho = '0';
if(count($_SESSION['carrinho']) > '0'):
    foreach($_SESSION['carrinho'] as $id_produto_carrinho => $quantidade_produto_carrinho):
        $item_carrinho++;

    	$database = open_database();

    $sql = "SELECT nome, preco_varejo, preco_atacado FROM produto WHERE id ='$id_produto_carrinho'";
    $resultados = mysqli_query($database,$sql);
    $res=mysqli_fetch_array($resultados);

    if (@mysqli_num_rows($resultados) > 0){
        foreach($resultados as $read_produto_carrinho_view);
        $valor_total_produto_carrinho = $quantidade_produto_carrinho * $read_produto_carrinho_view['preco_varejo'];
        $valor_subtotal_venda = '0';
        $valor_subtotal_venda += $read_produto_carrinho_view['preco_varejo'];       
        echo $valor_subtotal_venda;
       
    }
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, joaovictorv disse:

foreach($resultados as $read_produto_carrinho_view);

 

1 - Se você coloca o ";" (ponto e vírgula) após o foreach, significa que ele fará o looping sem processar as linhas seguintes.

Exemplo:

<?php
foreach( range( 1, 5 ) as $teste );//note o ";"
echo 1;
    
echo "\n";//apenas uma quebra de linha
    
foreach( range( 1, 5 ) as $teste )
    echo 2;

Resultado:

1
22222

Em ambas as vezes ele fez a volta 5 vezes, mas apenas na segunda ele executou o echo em todas as voltas. Sacou?

 

 

2 - Isso aqui:

$valor_subtotal_venda = '0';

Jamais deveria estar imediatamente antes da soma ("+="), pois significa que você sempre estará somando o valor à 0.

Isso deve estar antes do foreach apenas para definir a variável com 0 como valor inicial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade, esse código, assim como está, deveria estar dando erro de sintaxe. Tem abertura de if e foreach sem fechamento (abertura por dois pontos ":").

 

https://secure.php.net/manual/en/control-structures.alternative-syntax.php 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 20/03/2018 at 08:05, Matheus Tavares disse:

 

1 - Se você coloca o ";" (ponto e vírgula) após o foreach, significa que ele fará o looping sem processar as linhas seguintes.

Exemplo:


<?php
foreach( range( 1, 5 ) as $teste );//note o ";"
echo 1;
    
echo "\n";//apenas uma quebra de linha
    
foreach( range( 1, 5 ) as $teste )
    echo 2;

Resultado:


1
22222

Em ambas as vezes ele fez a volta 5 vezes, mas apenas na segunda ele executou o echo em todas as voltas. Sacou?

 

 

2 - Isso aqui:


$valor_subtotal_venda = '0';

Jamais deveria estar imediatamente antes da soma ("+="), pois significa que você sempre estará somando o valor à 0.

Isso deve estar antes do foreach apenas para definir a variável com 0 como valor inicial.

 

com certeza, estava somando sempre o valor a zero, essa variável fora do foreach e resolveu o problema simples...

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por FabianoSouza
      Possuo a tab TURMAS e EVENTOS.
      Preciso que o meu select existente, que seleciona registros da tab TURMAS (que faz JOIN com a tab EVENTOS), faça soma de horas dos EVENTOS associados ao item da tab TURMAS.
      SELECT, Campo1, Campo2, Campo... EVT.dataInicial, EVT.dataFinal FROM tabTURMAS LEFT JOIN tabEventosTreina AS EVT ... Creio que a lógica seria essa:
      -pegar a diferença entre os campos EVT.dataInicial, EVT.dataFinal
      -totalizar essas diferenças para todos os eventos que estiverem associados pelo relacionamento de chaves PK e FK que existem.
      -entregar o resultado dessa operação para cada item da consulta.
       
      Com esse código abaixo (de testes), consigo retornar a diferença de horas entre as duas datas.
      Mas não consigo evoluir. Acredito que precisaria isolar os minutos, somá-los para ver quantas horas totalizam, somar as horas, e por fim, juntar com a soma dos minutos.
       
      DECLARE @datainicial datetime, @dataFinal datetime DECLARE @qtde_Dif_Horas VARCHAR(10) SET @datainicial = '2023/16/11 19:00:00' SET @dataFinal = '2023/16/11 22:30:00' (select @qtde_Dif_Horas = CONVERT(varchar(10), @dataFinal - @datainicial, 108)) SELECT @qtde_Dif_Horas AS 'contHoras'  
    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Giovanird
      Tenho uma tabela com a coluna média (valor decimal) .
       
      cod | media | cod_sala 1 1,98 5 2 2,34 2 3 1,32 5 4 2,51 3 5 1,65 1 6 2,78 5 7 4,95 4 8 0,75 4 9 1,23 1 10 1,63 2 11 1,55 3 Preciso no select MYSQL ou dentro do foreach multiplicar os valores do campo média, de acordo com o fitro por cod_sala
      Exemplo pelo cod_sala: 5
      Sendo o resultdo final: 1,98 * 1,32 * 2,78 = 7,26

      Desde já agradeço!
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.