-1

我有一些 php 代码来获取 csv 文件,将其放入数组中,然后在 html 表中显示数组。此代码将用于具有多列(大约 10 列)的数据文件。我想将数据点四舍五入到小数点后 2 位,并且可以使用 $val = round($val, 2) 来实现。但是,当在我的代码中使用时,它还会更改时间列的格式,因此显示 12 而不是 12:00。如果有人知道如何更改数组中某些列的十进制格式,同时不考虑时间列,请让我知道。这是我现在拥有的代码:

$out = '';
echo "<th> Time </th><th> Temperature </th><th> Speed  </th>";
$handle = fopen("fakedata.csv", "r");

$columns = array(1,3,5);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $out = ("<tr>\r\n").$out;
        foreach ($data as $index=>$val) {
                if (in_array($index+1, $columns))
            {
                    $val = round($val, 2);
                    $out = ("\t<td>$val</td>\r\n").$out;
            }
    }

        echo("</tr>\r\n");
} //end while
echo $out;

echo "\n</table></body></html>";

(我知道 $out 的东西很奇怪,但它会翻转行顺序并首先显示最新数据)。无论如何,我的主要问题是更改 csv 数组某些行的十进制格式,在这种情况下,仅将 $column[3] 或第三列更改为 2 个小数位。谢谢您的帮助。

4

2 回答 2

0

依靠 sprintf() 的魔力怎么样?代替:

$val = round($val, 2);
$out = ("\t<td>$val</td>\r\n").$out;

尝试:

$out = sprintf("\t<td>% 6.2f</td>\r\n%s",$val,$out);
于 2013-03-26T07:14:56.263 回答
0

只需添加另一个 if 来检查它是否在第三列,这种情况下我使用了速记三元运算符。

if (in_array($index+1, $columns)) {
    $val = ($index+1 == 3) ? round($val, 2) : $val;
    $out = ("\t<td>$val</td>\r\n").$out;
}
于 2013-03-26T03:42:54.320 回答