我正在做一些php脚本,并且我有一种将几种内容保存在txt中的表格。
我需要读取所有行,并取每行的最后一个值,并将它们全部放入数组中
我当时想我可以使用explode函数来做到这一点,但我不知道如何多次实现它以求和所有值并获得平均值。
$nombre=$_POST['nombre'];
$edad=$_POST['edad'];
$email=$_POST['email'];
$importe=$_POST['importe'];
$nombre=$_POST['nombre'];
//this part writes each value of the form to a txt file separated by an " | "
// this is where I need help. I have to show the sum of all the $importe values in all of the lines in the txt
//
$miarchivo=fopen("resultados.txt","a");
if(!($miarchivo))
{
print("Imposible abrir archivo");
exit;
}
fputs($miarchivo," $nombre | $edad | $email | $importe \n" .PHP_EOL);
fclose($miarchivo);
//echo "<script>location.href='forma.php'</script>";
//This part only shows the values of the txt after the script ends
$miarchivo=fopen("resultados.txt","r");
if
(! ($miarchivo))
{
print("no hay resultados");
exit;
}
while(!feof($miarchivo)){
$linea=fgets($miarchivo,255);
print"$linea<BR>";
}
fclose($miarchivo);
我希望得到一个像这样的数组:
tab [0] $importe //from line 0
tab [1] $importe //from line 2
tab [2] $importe //from line 3
tab [3] $importe //from line 4
所以我可以将所有这些求和并获得其他变量的平均值
答案 0 :(得分:0)
您需要通过添加这样的括号来使$linea[]
成为数组。
while(!feof($miarchivo)){
$linea[]=fgets($miarchivo,255);
}
然后您可以像这样访问每一行...
$linea[0] = "line 1"
$linea[1] = "line 2"
如果您需要像在while循环中一样打印当前行,则可以添加另一个临时变量并像这样打印该行...
$linea[] = $currentLine = fgets($miarchivo,255);
print($currentLine);
答案 1 :(得分:0)
导出到数组,然后获取最后一个值并存储在数组中。最后添加数组并获得平均结果。这是您的代码
while(!feof($miarchivo)){
$linea=fgets($miarchivo,255);
$quantityArray[] = end(explode('|',$linea));
}
$averageResult = array_sum($quantityArray)/count($quantityArray);
答案 2 :(得分:0)
您无需将值存储在数组中即可获得平均值。除非您需要对该数组进行其他操作,否则只会浪费内存。您可以在读取各行时对$importe
值求和并计数,然后从最后的这些值计算平均值。
$count = $sum = 0;
while (($linea = fgetcsv($miarchivo, 0, '|')) !== false) {
$importe = trim($linea[3]);
$count++;
$sum += $importe;
}
if ($count) { // check count to prevent division by zero
$average = $sum / $count;
}