Ir para conteúdo

POWERED BY:

Arquivado

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

leo_SJCampos

[Resolvido] select em array e somar valores

Recommended Posts

Galera, tenho uma dúvida...

tenho um array que vem alguns valores, esses valores sao passados como parametro em um select e o mesmo retorna 14 linhas de preço de alguns produtos.

Só que cada parametro retorna preços diferentes.. o que eu preciso é soma-los o primeiro do primeiro parametro, com o primeiro do segundo paremetro, o segundo do primeiro parametro com o segundo do segundo parametro.. entenderam?

 

eu travei aqui

$faixaDep = json_decode($_REQUEST['faixaDep']);
foreach ($faixaDep as $campo=>$valor) {
		 $faixa_dep = $valor->faixa;
	 $sql = pg_query("select a.preco, b.descricao from wpreco a, wplano b
      		                  where a.tplano = b.id_plano
		          and faixa = '$faixa_dep' order by a.preco");
	 while($obj = pg_fetch_object($sql)) {
	    $valor = $obj ->preco;								
	    $arr[] = $obj;	
	}	

 

ou seja aquela variavel faixa_dep dependente é um valor do array que eu recebo, ele esta pegando todos os preços dessa faixa, só que na proxima volta do foreach ele vai ter outro valor na faixa_dep, e eu preciso soma-lo com com os preços da primeira, como eu expliquei logo a cima

 

alguem pode me ajudar?

 

valeu galera....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo leo, se você precisa da soma dos valores de todas as faixas, porque você precisa separar por faixas? :huh:

Se você precisa apenas de um total faça o SUM dos valores em uma outra query fora do loop, assim você mantem os dados

exibidos de cada faixa e tem também a soma.

 

Ou você pode montar um array para cada faixa no caso de ter que somar posição 0 com 0, 1 com 1 etc.

 

while($obj = pg_fetch_object($sql)) {
                   $valor = $obj ->preco;                                                              
                   $arr[$faixa_dep] = $obj;      
               }       

Assim você pode fazer um for depois e ir somando cada posição de cada faixa.

 

Pegou a idéia?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é bem separar por faixas...

 

é que é assim, cada faixa tem 14 valores, e cada valor uma descricao...

Eu preciso somar esses valores caso haja mais de uma faixa.

 

por exemplo tenho duas faixas etarias cada uma com 14 valores e descricao. entao eu tenho que somar o primeiro valor de uma faixa com o primeiro valor da outra, e assim por diante. e depois exibir essa soma...

 

Foi isso que você me explicou? eu nao entendi muito bem...

 

Valeu parceiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi sim amigo leo.

 

É só você observar o while que eu fiz que você vai ver

que eu monto um array tendo como indice a faixa etaria.

 

Apartir dai, basta você somar os valores depois em um loop

pois você vai ter um indice para efetuar a soma.

 

Entendeu?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que to começando a entender... mas por favor me tire mais uma duvida...

 

como que eu vou saber quantos arrays eu preciso somar? pelo que eu entendi cada faixa será um array e eu preciso somar o primeiro valor da faixa 1 com o priemeiro da 2,3,4 etc.. quantos tiverem...

 

outra coisa como que eu pego o primeiro item de cada array para soma-los?

 

apanho muito com array brother.. hehe...

 

valeu pela resposta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai depende de como você armazena e oque você precisa somar amigo leo.

Oque você precisa somar? $obj->preco ?

 

Da um var_dump() em $obj, cola aqui pra gente e diz o que você precisa somar.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o codigo esta assim

$faixaDep = json_decode($_REQUEST['faixaDep']);
foreach ($faixaDep as $campo=>$valor) {
	 $faixa_dep = $valor->faixa;
	 $sql = pg_query("select a.preco, b.descricao from wpreco a, wplano b
				where a.tplano = b.id_plano
				and faixa = '$faixa_dep' order by a.preco");
	 while($obj = pg_fetch_object($sql)) {
  	        $valor = $obj->preco;								
	 	$arr[$faixa_dep] = $obj;
		var_dump($obj->preco);			  
	 }	
}
}

 

 

ele retorna assim

 

string(5) "61.78"

string(5) "64.40"

string(5) "79.85"

string(5) "99.81"

string(6) "107.65"

string(6) "113.42"

string(6) "118.62"

string(6) "135.60"

string(6) "147.10"

string(6) "155.94"

string(6) "168.15"

string(6) "193.38"

string(6) "199.60"

string(6) "247.53"

 

//Aqui termina uma faixa e ja começa outra, entao eu teria que somar o 61,78 da primeira faixa com o da segunda entendeu? e //assim por diante independente do numero de faixas que tiver... to apanhando pra fazer isso ai

 

string(5) "61.78"

string(5) "64.40"

string(5) "79.85"

string(5) "99.81"

string(6) "107.65"

string(6) "113.42"

string(6) "118.62"

string(6) "135.60"

string(6) "147.10"

string(6) "155.94"

string(6) "168.15"

string(6) "193.38"

string(6) "199.60"

string(6) "247.53"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo leo eu entendi oque você quer fazer porém, o var_dump só retorna isso?

To achando meio impossível pois se o retorno do var_dump fosse somente este

$obj->preco; não existiria certo? :huh:

 

Cola o var_dump de $obj mesmo para podermos ver os indices tudo certinho.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o var_dump de $obj retorna assim

 

object(stdClass)#4 (2) {

["preco"]=>

string(5) "61.78"

["descricao"]=>

string(7) "ALFA CP"

}

object(stdClass)#5 (2) {

["preco"]=>

string(5) "64.40"

["descricao"]=>

string(6) "ALFA F"

}

object(stdClass)#4 (2) {

["preco"]=>

string(5) "79.85"

["descricao"]=>

string(6) "BETA F"

}

object(stdClass)#5 (2) {

["preco"]=>

string(5) "99.81"

["descricao"]=>

string(6) "BETA 1"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "107.65"

["descricao"]=>

string(11) "ALFA F PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "113.42"

["descricao"]=>

string(6) "BETA 2"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "118.62"

["descricao"]=>

string(11) "ALFA 2 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "135.60"

["descricao"]=>

string(16) "ALFA 21 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "147.10"

["descricao"]=>

string(11) "BETA 2 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "155.94"

["descricao"]=>

string(16) "ALFA 22 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "168.15"

["descricao"]=>

string(16) "BETA 21 PLUS SJC"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "193.38"

["descricao"]=>

string(16) "BETA 22 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "199.60"

["descricao"]=>

string(12) "ALFA 22 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "247.53"

["descricao"]=>

string(12) "BETA 22 PLUS"

}

object(stdClass)#4 (2) {

["preco"]=>

string(5) "61.78"

["descricao"]=>

string(7) "ALFA CP"

}

object(stdClass)#5 (2) {

["preco"]=>

string(5) "64.40"

["descricao"]=>

string(6) "ALFA F"

}

object(stdClass)#4 (2) {

["preco"]=>

string(5) "79.85"

["descricao"]=>

string(6) "BETA F"

}

object(stdClass)#5 (2) {

["preco"]=>

string(5) "99.81"

["descricao"]=>

string(6) "BETA 1"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "107.65"

["descricao"]=>

string(11) "ALFA F PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "113.42"

["descricao"]=>

string(6) "BETA 2"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "118.62"

["descricao"]=>

string(11) "ALFA 2 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "135.60"

["descricao"]=>

string(16) "ALFA 21 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "147.10"

["descricao"]=>

string(11) "BETA 2 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "155.94"

["descricao"]=>

string(16) "ALFA 22 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "168.15"

["descricao"]=>

string(16) "BETA 21 PLUS SJC"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "193.38"

["descricao"]=>

string(16) "BETA 22 PLUS SJC"

}

object(stdClass)#4 (2) {

["preco"]=>

string(6) "199.60"

["descricao"]=>

string(12) "ALFA 22 PLUS"

}

object(stdClass)#5 (2) {

["preco"]=>

string(6) "247.53"

["descricao"]=>

string(12) "BETA 22 PLUS"

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza amigo leo.

 

Tem de ser um array bi-dimensional já que esse var_dump mostra os objetos de um faixa só ok?.

 

$arr = array();
while ($obj = pg_fetch_object($sql)) {
      $valor = $obj ->preco;                                                              
      $arr[$faixa_dep][] = $valor;      
}

Fazendo isto você vai ter algo como o exemplo abaixo

 

Array ( 16 => 
                   Array ( 0 => 68.13,
                           1 => 212.20,
                           2 => 100.20,
                           3 => 98.00,
                           4 => 282.45
                         )
            )

Ai basta outro loop para somar os dados.

Veja um exemplo mais completo:

 

$arr = array();
$faixaDep = json_decode($_REQUEST['faixaDep']);
foreach ($faixaDep as $campo=>$valor) {
        $faixa_dep = $valor->faixa;
        $sql = pg_query("select a.preco, b.descricao from wpreco a, wplano b
                               where a.tplano = b.id_plano
                               and faixa = '$faixa_dep' order by a.preco");
        while($obj = pg_fetch_object($sql)) {
               $valor = $obj->preco;                                                           
               $arr[$faixa_dep][] = $valor;  
        }      
}


$soma = array();
foreach ($arr AS $faixa=>$valores) {
   foreach ($valores AS $posicao=>$valor) {
       $soma[$posicao] += $valor;
   }  
}

var_dump($soma);

Não testei mas acredito que ja lhe ajude.

 

Qualquer coisa posta ae.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo deu certo... a soma funcionou.. mas sem querer ser folgado.. como que eu coloco a descricao ? voce viu que no meu select eu trago o valor e a descricao, só que com esse um monte de foreach ai ela se perdeu no meio do caminho... aonde que eu devo inserir a descricao juntamente com o valor, para retornar para minha tabela?

 

muito obrigado parceiro, seu ensinamento foi de grande ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Leo sem querer ser grosso, da uma estudada no código que postei pra você.

Fico contente que tenha funcionado, entendo que você se atrapalhe com array,

mas agora você já levantou outra dúvida. Você se quer analisou o script que te

passei. Antes de se comprometer a desenvolver algo, entenda aquilo que esta fazendo.

 

Eu particularmente gosto muito de ajudar as pessoas que tem o desejo de aprender.

Eu resolvi o problema pra você e vi que na verdade só oque você precisava era do problema

resolvido.

 

Não tenho nada contra ninguém do fórum, inclusive existem membros que não incentivam

outros membros a estudar, dando todo o código mastigado pro cara resolver os problemas dele.

E existem ainda os que acham que membros assim fazem "um brasil melhor" dando o peixe assado já

ao invés de ensinar a pescar.

 

Espero que não me leve a mal, mas eu prefiro acreditar que programadores melhores se fazem com estudo

e eu sou um cara que incentiva as pessoas a estudar, porque um dia ele vai ter um problema pra resolver

e ninguém pra ajudar, e o prazo da solução vai ser de 8 horas ou menos. E quando este dia chegar aqueles

a quem eu incentivei a estudar vão saber se virar.

 

Minha dica pra você é: Estude o código que te passei, aprenda mais sobre arrays. O google tem muita matéria sobre isso.

O manual do PHP explica sobre array. Estude mais lógica de programação. Sua dúvida é algo simples de resolver.

Tente pelomenos neste trecho, entender como funciona e achar a solução consciente (não tentativa e erro) ok?

 

Se desejar ser um programador melhor estude, caso ache tudo que eu disse um absurdo então aguarde mais um pouco,

com certeza alguém vai finalizar este código pra você.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pelas dicas mano... tentei fazer um pouco diferente.. agora ele trouxe tudo que eu precisava, só que a soma não esta funcionando mais.. fiz alguma coisa errada, alguem poderia analisar pra mim?

 

//Verifica se $desc já existe em $arr - Se existir, retorna a posição
function encontra($desc, $arr) {
$ret = -1;
for($i=0; $i<count($arr); $i++) {
  	    if ($arr[$ni]["descricao"] == $desc) {
	$ret = $i;
	break;
    }
}
return $ret;
}	


$faixaDep = json_decode($_REQUEST['faixaDep']);
foreach ($faixaDep as $campo=>$valor) {

$faixa_dep = $valor->faixa;
$sql = pg_query("select a.preco, b.descricao from wpreco a, wplano b
		where a.tplano = b.id_plano
		and faixa = '$faixa_dep' order by a.preco");
$ind = 0;
while($obj = pg_fetch_object($sql)) {
	$valor = $obj->preco;
	$descricao = $obj->descricao;
	//Verifica se já existe
	$pos = encontra($descricao, $arr);
	if ($pos >= 0) {
	//Já existe - Somando ao valor (coluna
		$arr[$pos]["valor"] += $valor;
	} else {
	//Não existe - Cria
		$arr[] = array("id" => $ind, "descricao" => $descricao, "preco" => $valor);
           		$ind++;
	}
}
}



echo $_GET['callback'].'({"resultado":'.json_encode($arr).'})';	

 

valeu pessoal

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.