PHP从文件中求和

PHP从文件中求和,php,forms,file,sum,fopen,Php,Forms,File,Sum,Fopen,我还在这里学习用PHP编写代码,现在我有一个问题 我有一个.txt文件,比如“results.txt”,它包含5个不同的选项,后面有一个数字。这些代表了来自5个不同选项的投票。布局如下: 1|3 2|6 3|2 4|8 5|10 阶梯数是选项获得的票数 我需要做的是将选票相加,增加1,然后重复结果: echo "Total votes: 30 votes" 在这种情况下会是这样 用于投票的表格是您的普通和简单表格,有5种不同的选项: <form action="aanestys.php

我还在这里学习用PHP编写代码,现在我有一个问题

我有一个.txt文件,比如“results.txt”,它包含5个不同的选项,后面有一个数字。这些代表了来自5个不同选项的投票。布局如下:

1|3
2|6
3|2
4|8
5|10
阶梯数是选项获得的票数

我需要做的是将选票相加,增加1,然后重复结果:

echo "Total votes: 30 votes"
在这种情况下会是这样

用于投票的表格是您的普通和简单表格,有5种不同的选项:

<form action="aanestys.php" method="get">
Choose an option: 
<select name="vote">
<option value=1 selected>1</option> 
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
</select>
<br>
<input type="submit" value="Send">          
</form>

选择一个选项:
1.
2.
3.
4.
5.

你有什么关于如何做到这一点的提示或建议吗?我不一定需要一个直接的答案,因为我确实想学习使用fopen、fgets和fwrite命令,而不仅仅是复制/粘贴代码

编辑:投票似乎转到了与表单一起选择的选项。而且.txt文件必须是最新的。到目前为止,我得到了这个:

<?php
$lines = file("results.txt");
$vote = $_GET['vote'];
$summa = 0;
$val = array();

foreach($lines as $line) {
$var;
$var = explode("|", $line);
if ($vote == $var[0]){
    $var[1]++;
    array_push($val, $var[0], "|", $var[1]);
} else {
    array_push($val, $var[0], "|", $var[1]);
}
$summa = $summa += $var[1];
}
$ulos = implode("\n", $val) . "\n";
//Somehow, because this is an exercise, the checker says this is right 
//although it's totally not even close to it.

echo "Total votes: $summa votes.";

file_put_contents("results.txt", $ulos);
?>

有一些帮助器函数更易于使用:

而且你是你的朋友

对你的情况也很有帮助

编辑:

像Robert那样做,或使用
fgetcsv
的其他选项(未测试):

如果需要增加特定投票,可以在while循环中执行以下操作:

while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {
    $num = (int) $data[0];
    $vote = (int) $data[1];
    if ($num === 2) {
        $vote += 1;
    }
    else if ($num === 4) {
        $vote += 1;
    }
    $sum += $vote;
}

使用
$text=file\u获取内容('text.txt')
读取文本,或使用
$text=file('text.txt')
逐行读取 并将其放入变量$text中。

然后使用带分隔符的
split或explode |
仅获取第二个值,然后使用
intval
将它们从
字符串转换为int,最后可以求和并打印结果。

首先需要使用函数file()将文件行放入数组中

<?php 

$lines = file('results.txt');
$votes_up  = 0;
$votes_down = 0;
foreach($lines as $line) //loop after every line
{
  $votes = explode("|", $line); //exploding string by | param to get two votes
  $votes_up += $votes[0]; // it will ad first number as vote up
  $votes_down += $votes[1]; //same but for votes down
}

echo "total votes up: $votes_up<br>";
echo "total votes down: $votes_down<br>";
echo "total votes: ".($votes_up + $votes_down)."<br>";
echo "total votes + 1: ".($votes_up + $votes_down + 1)."<br>";

?>

希望对你有帮助。在您的情况下,使用
file()
比fopen等要好得多。但是,如果将来需要处理文件内容,您应该注意以下功能:

  • file_get_contents()-它获取文件的内容
  • file_put_contents()-将内容放入文件
使用打开文件,在行中循环,使用分隔符“|”,每次添加(
$var[1]
)将总和存储在
$sum

<?php
$lines = file('file.txt');
$sum = 0 ;

foreach ($lines as $line){
$var = explode("|", $line);
$sum = $sum +  $var[1];
}

echo $sum+1; //outputs 30
?>

希望这有帮助。

试试这个:

$fp=@fopen("results.txt","rb"); 
$sum = 0;
while($fp && $line=stream_get_line($fp,65535,"\n")){ 
    list($opt, $votes) = explode('|', trim($line)); 
    $sum += $votes;
} 
fclose($fp);
echo ++$sum;

你想增加被投票的总票数,然后打印所有选项票数的总和吗?不。我想先将所有票数相加(示例中为29票),然后再将其增加1(到30票)。关于如何从一开始就将“1 |”项分开,以便我可以计算票数的任何提示?@user2466992请参阅我的编辑。我以为你想自己做;)一个简单的问题:如果总数不只是增加1,而是需要在一次计票中增加,那该怎么办?@Uhkam见编辑。在这个例子中,我增加了num 2+4的投票数。介意看看我在问题中的编辑吗?我现在离它很近,但仍然有问题。这很好地解决了问题:)很好地解释了它是如何工作的,等等。非常感谢。
$fp=@fopen("results.txt","rb"); 
$sum = 0;
while($fp && $line=stream_get_line($fp,65535,"\n")){ 
    list($opt, $votes) = explode('|', trim($line)); 
    $sum += $votes;
} 
fclose($fp);
echo ++$sum;