Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
rikardo_92

Somar certos valores

Recommended Posts

rikardo_92

Eu tenho uma caixa de texto, faço explode ao conteudo de modo a ficar com tudo separado por um espaço. Tenho a contagem de quantos pedaços me dá o explode.

Fico com algo deste tipo:

123 456 745 6753 57554 45 354

Sendo cada um dos pedaços obtidos do explode um número, eu agora queria somar os numeros desta forma:

1 + 4 + 7 + 10 + ...

2 + 5 + 8 + 11 + ...

3 + 6 + 9 + 12 + ...

O que tenho até agora é:

$resunproc = $_POST['resources'];
$resnl = str_replace("\n", " ", $resunproc);
$resxplode = explode(" ", $resnl);
$resno = count($resxplode);

Agradece-se ajuda :P

Share this post


Link to post
Share on other sites
scorch

http://pt2.php.net/manual/en/function.substr.php

http://pt2.php.net/manual/en/function.count-chars.php

Primeiro obténs o número de caracteres por cada índice do array, e depois, usas a função substr para isolar o que queres. Depois soma-los.

Ou então, separa-los logo todos para um array, por exemplo:

//123 456 745 6753 57554 45 354
$rexplode[0][0] = 1;
$rexplode[0][1] = 2;
$rexplode[0][2] = 3;

$rexplode[1][0] = 4;
$rexplode[1][1] = 5;
//...


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
rikardo_92

Se calhar expliquei-me mal. Eu não sei o que vai ser introduzido na caixa de texto. Tenho mesmo que funcionar com as coisas divididas pelo espaço do explode.

Se eu tiver algo como isto:

567 586 684 234 784 978 295 978 678

Eu quero somar:

567 + 234 + 295 = X

586 + 784 + 978 = Y

684 + 978 + 678 = Z

E no final fazer echo ao X, Y e ao Z.

Mas esses números podem ter N digitos. Eu não sei o que vão lá por.

Share this post


Link to post
Share on other sites
scorch

Sim eu percebi. Mas com a função substr crias um array com aquele aspecto, para depois poderes somar.


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
MasterGipy

Se fores pelo caminho fácil da questão:

<form method="post" action="index2.php">
<textarea name="valores" cols="40" rows="5"></textarea>
<br>
<input type="submit" value="Calcular" />
</form>


<?php

// Metemos os valores a zeros
$woodtotal = 0;
$loamtotal = 0;
$irontotal = 0;

$valores = $_POST['valores']; 
$resultado = str_replace("\n", " ", $valores);

list($res1, $res2, $res3, $res4, $res5, $res6, $res7, $res8, $res9, $res10, $res11, $res12, $res13, $res14, $res15, $res16, $res17, $res18, $res19, $res20, $res21) = explode(" ", $resultado);

$woodtotal = ($res1 + $res4 + $res7 + $res10 + $res13 + $res16 + $res19);
$loamtotal = ($res2 + $res5 + $res8 + $res11 + $res14 + $res17 + $res20);
$irontotal = ($res3 + $res6 + $res9 + $res12 + $res15 + $res18 + $res21);
?>


<?echo "Madeira : ".$woodtotal;?>
<br>
<?echo "Argila : ".$loamtotal;?>
<br>
<?echo "Ferro : ".$irontotal;?>

Eu sei estas variáveis pois tive acesso ao codigo base do rikardo_92

Share this post


Link to post
Share on other sites
rikardo_92

Bem, eu andei a ler a substr e não entendi onde aquilo pode entrar. Eu strings e arrays nunca usei antes, tive a ler os basicos mas não consegui lá chegar.

É suposto eu usar a substr para isolar cada um dos números? Mas como é que faço isso? :s

O código é o seguinte:

<?php

$resunproc = $_POST['resources'];
$resnl = str_replace("\n", " ", $resunproc);
$resxplode = explode(" ", $resnl);
$resno = count($resxplode);

$woodtotal = 0;
$loamtotal = 0;
$irontotal = 0;

$p = $_GET['p'];

?>

<html>
<head>
</head>

<body>
<br><br>
Calculadora de recursos saqueados
<br>
<br>
<br>
<form method="post" action="index.php?p=calc">
<textarea name="resources" cols="40" rows="5">
<? echo $resunproc; ?>
</textarea><br>
<input type="submit" value="Calcular" />
</form>
<br>

<?
if($p == 'calc') {
echo "Madeira : ".$woodtotal;?><br><?echo "Argila : ".$loamtotal;?><br><?echo "Ferro : ".$irontotal;
}
?>

</body>
</html>

Obrigado :P

Share this post


Link to post
Share on other sites
infopc

então deixa ver, tens um campo te texto que pode ter quebra de linha "\n".

o texto vem no seguinte modo :

123 45 2347

e queres que fique do tipo

123 + 45 + 2347 = x

$x = 0;
$POST["caixatexto"] = str_replace ("\n", " ", $POST["caixatexto"]);
$nums = explode (" ", $POST["caixatexto"]);
foreach ($nums as $num) {
    if (is_numeric($num)) {
        $x += $num;
    }

echo "A soma dos numeros é {$x}";

é isto?


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
MasterGipy

É quase isso:

Exemplo:

122 212 344 343 349 767 878 456 678

Primeira soma: 122 + 343 + 878 = X

Segunda soma: 212 + 349 + 456 = Y

Terceira soma: 344 + 767 + 678 = Z

echo X

echo Y

echo Z

Share this post


Link to post
Share on other sites
sc0rpion

Mas tu vais ter sempre a mesma quantidade de números (9) na caixa de texto?

E o salto entre os números (3) é sempre o mesmo ou depende de quantos números tens? É que se tiveres por exemplo 5 números não tens forma de fazer isso.

Tens que especificar bem o que queres porque senão é difícil ajudarem-te. Eu próprio já vim ver o tópico várias vezes e não consegui perceber na totalidade o que queres.

Share this post


Link to post
Share on other sites
rikardo_92

Imagina que isto é a caixa de texto com possiveis valores:

126 9886 59849 
6 88 356 
969 474 9899 
355 7834 475 

O que eu quero fazer é somar o 126 + 6 + 969 + 355, depois o 9886 + 88 + 474 + 7834 e o 59849 + 356 + 9899 + 475

Os numeros são sempre inserido na caixa de texto daquela forma, tanto podem haver 10 linhas como 20 ou 30.

Cada linha tem 3 números diferentes, cada um desses números eu não sei a quantidade de algarismos que ele pode ter.

Isto é para o tribalwars, eu quero uma ferramenta que some os recursos roubados, como há três recursos diferentes quero que ele some casa recurso.

É daí que eu quero que ele some de três em três.

Share this post


Link to post
Share on other sites
sc0rpion

Então e tens uma textarea tal e qual como nesse exemplo que deste, ou cada linha desse exemplo corresponde a uma caixa de texto diferente?

Share this post


Link to post
Share on other sites
MasterGipy

Vai tudo para uma caixa de texto...

<form method="post" action="index.php?p=calc">
<textarea name="resources" cols="40" rows="5">
</textarea><br>
<input type="submit" value="Calcular" />
</form>

Share this post


Link to post
Share on other sites
MasterGipy

Não percebo o que se está a tentar fazer, a não ser que seja um sistema à parte do tribalwars ..

Isto é para o tribalwars, eu quero uma ferramenta que some os recursos roubados, como há três recursos diferentes quero que ele some cada recurso.

É daí que eu quero que ele some de três em três.

É para uso próprio...é a parte...

Share this post


Link to post
Share on other sites
MasterGipy

Não acredito que seja à parte se ele vai ler um txt .. Mas posso estar enganado.

Não...

ele vai ler o que se insere na caixa de texto...

Share this post


Link to post
Share on other sites
sc0rpion

Bem, feito assim um bocado à pressão mas presumo que seja algo tipo isto:

<?php
if(isset($_POST['submit'])){

$array = preg_split("/(\r\n|\n)/", $_POST['resources']);

for($i = 0 ; $i < sizeof($array) ; $i++){

	$array[$i] = explode(" ", $array[$i]);

}

$resultado = array();

for($i = 0 ; $i < sizeof($array) ; $i++){

	for($j = 0 ; $j < sizeof($array[$i]) ; $j++){

		$resultado[$j] += $array[$i][$j];

	}

}
for($i = 0 ; $i < sizeof($resultado) ; $i++){

	echo "<br/>Resultado {$i}: {$resultado[$i]}";

}

}

?>

<form method="post" action="">
<textarea name="resources" cols="40" rows="5">
</textarea><br/>
<input type="submit" name="submit" value="Calcular" />
</form>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.