我在这里仍在学习用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);
?>
但是计票结果不对。这怎么了?
用file()
打开文件,在行中循环,用分隔符"|"explode()
,每次加($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
?>
希望这能有所帮助。
使用$text= file_get_contents('text.txt')
读取文本或使用$text = file( 'text.txt' )
逐行读取并将其放入变量$text中
然后使用split or explode with the delimiter |
只取第二个值,然后使用intval
将它们从string到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()-将内容放入文件
试试这个:
$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;
有一些辅助函数更容易使用:
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
进一步内爆和爆炸是你的朋友。
此外,fgetcsv和fputcsv在您的情况下可能非常有用。
编辑:
像Robert一样,还是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;
}