0

我在这里仍在学习使用 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>

您对如何执行此操作有任何提示或建议吗?我不一定需要一个直接的答案,因为我确实想学习使用 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);
?>

但是票数是不对的。这有什么问题?

4

5 回答 5

1

用 打开文件file(),遍历行,使用分隔符“|”,并通过每次添加 ( ) 来explode()存储总和。$sum$var[1]

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

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

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

希望这可以帮助。

于 2013-07-09T13:09:31.383 回答
0

首先,您需要使用函数 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() - 将内容放入文件
于 2013-07-09T13:02:44.037 回答
0

尝试这个:

$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;
于 2013-07-09T13:39:28.140 回答
0

有一些更容易使用的辅助函数:

http://www.php.net/manual/en/function.file.php

http://www.php.net/manual/en/function.file-put-contents.php

http://www.php.net/manual/en/function.file-get-contents.php

进一步内爆炸是你的朋友。

fgetcsvfputcsv对您的情况也很有帮助。

编辑:

像罗伯特一样做,或者其他选项fgetcsv(没有测试):

$sum = 0;
if (($handle = fopen("results.txt", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {
        $sum += (int) $data[1];
    }
    fclose($handle);
}
$sum += 1;
echo "Total votes: $sum votes";

如果您需要增加特定投票,您可以在 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;
}
于 2013-07-09T12:49:38.353 回答
0

用于$text= file_get_contents('text.txt')读取文本或$text = file( 'text.txt' )逐行读取并将其放入变量 $text 中。

然后使用split or explode with the delimiter |仅取第二个值,然后intval将它们从字符串转换为 int,最后您可以对它们求和并打印结果。

于 2013-07-09T12:51:55.743 回答