将几行中的值保存到数组

时间:2019-06-11 13:39:10

标签: php

我正在做一些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

所以我可以将所有这些求和并获得其他变量的平均值

3 个答案:

答案 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;
}