平均php数组中的一列

问题描述 投票:0回答:1

我有一个制表符分隔的文本文件,看起来像这样:http://realmonitor.com/nick-stuff/210320.AVG.txt

我可以将其放入数组,确定:http://realmonitor.com/nick-stuff/avg.php

但不知道如何对列求平均值。

试图获得出现在每个标题下方的值的平均值-593、594、595等。

任何帮助将不胜感激!

我的将文件放入数组的代码:

    <?php

    $file = "210320.AVG.txt";// Your Temp Uploaded file
    $nowavg = array();
    $cols2 = array();
    ini_set('auto_detect_line_endings', true);

    $fh = fopen($file, 'r');
    $i = 0;

    while (($line = fgetcsv($fh, 1000, "\t")) !== false) {
      $nowavg[] = $line;

       }

    $j = 1;

    for ($j = 8; $j != 23; $j++)   {

    $cols2[$j][0] = $nowavg[$j][0];

    // $j++;

       }

    echo "<pre>";
    print_r($nowavg); 
    echo "</pre>";

    echo "<pre>";
    print_r($cols2); 
    echo "</pre>";

    ?>

为清楚起见在评论后添加:

对。我想我也不会热衷于单击链接。

这是AVG文件的外观:

593 594 595 611 612 613 1214    1215    1216    1547    1548    1549    1565    1566    1567    

03:59:49 1827 1796 1784 1992 1922 1939 1968 1925 1910 2248 2231 2254 1751 1755 175104:59:47 1893 1863 1835 2048 2000 2030 1955 1908 1901 2254 2222 2237 1801 1791 179205:59:39 2021 1990 1981 2060 2022 2038 2032 1986 1967 2252 2233 2248 1777 1790 179406:59:45 2042 1979 1957 2116 2077 2084 2050 1988 1979 2256 2232 2241 1848 1852 185607:59:44 2047 2000 1995 2124 2105 2112 2068 2021 2004 2217 2158 2145 1871 1896 189108:59:46 2081 2048 2023 2123 2127 2107 2019 1972 1966 2204 2176 2202 1827 1841 185109:59:43 2080 2045 2019 2135 2130 2132 2044 2001 1990 2232 2192 2220 1783 1842 179610:59:47 2101 2070 2011 2144 2156 2143 1995 1957 1941 2237 2203 2225 1798 1883 182011:59:48 2108 2139 2055 2141 2171 2137 2049 2002 1975 2160 2134 2200 1780 1864 179612:59:48 2084 2165 2030 2101 2152 2082 2096 2057 2044 2167 2139 2200 1756 1902 175413:59:56 1878 2130 1804 2056 2067 2011 1878 1874 1845 2165 2148 2160 1732 1950 171414:59:52 1784 1868 1784 1812 1821 1799 1963 1932 1893 2021 1978 2023 1580 1728 156015:59:51 1732 1746 1755 1807 1814 1819 1953 1902 1864 1846 1808 1814 1551 1559 153916:59:53 1609 1615 1620 1617 1623 1620 1877 1824 1803 1802 1746 1766 1542 1546 152417:59:13 1588 1594 1594 1609 1611 1609 1753 1730 1691 1778 1749 1731 1523 1543 1511

这是我想看到的:

593 594 595 ...2000 2134 1985

所需结果的第一行是AVG文件的标题行,而下面的行是AVG文件中每列数字的平均值。

php arrays average
1个回答
0
投票

此代码试图减少值的处理和中间存储。它读取文件并维护每一列的运行总计以及行数。

首先提取带有593等的标题行(删除前面的空白字段),然后读取每一行。然后将每个值累加起来,并在循环之后输出标题,其总和除以行数...

$fh = fopen($file, 'r');

$headings = fgetcsv($fh, null, "\t");
array_shift($headings);
$totals = array_fill(0, count($headings), 0);
$rows = 0;
while (($line = fgetcsv($fh, null, "\t")) !== false) {
    array_shift($line);
    foreach ( $line as $position => $value )    {
        $totals[$position] += $value;
    }
    $rows ++;
}

foreach ( $headings as $position => $name ) {
    echo $name. "=" . ( $totals[$position] / $rows ).PHP_EOL;
}

给出...

593=1925
594=1936.5333333333
595=1883.1333333333
611=1992.3333333333
612=1986.5333333333
613=1977.4666666667
1214=1980
1215=1938.6
1216=1918.2
1547=2122.6
1548=2089.9333333333
1549=2111.0666666667
1565=1728
1566=1782.8
1567=1729.9333333333
=0
© www.soinside.com 2019 - 2024. All rights reserved.