我是PHP新手并尝试使用fscanf读取CSV文件以确定最小值和最大值。我的previous问题概述了实际上要做的事情。我正在尝试使用fscanf来查找CSV列的最大值和最小值,如下所示。
$file = fopen('<filename>', 'r');
$a = 0;
$b = 0;
$first = true;
while (fscanf($file, '%d%d', $a, $b)) {
if ($first)
{
$min = $b;
$max = $b;
$total = $b;
$count = 1;
$first = false;
}
else
{
$total += $b;
if ($b < $min) $min = $b;
if ($b > $max) $max = $b;
$count++;
}
}
$avg = $total / $count;
对于我的场景,我动态获取CSV文件。我想根据列数使用上面的代码。例如,如果我有4列,我需要使用前面的代码,
while (fscanf($file, '%d%d%d%d', $a, $b, $c, $d)) {
并确定CSV文件中所有4列的最大值和最小值。如果它只有3列,我需要使用代码,
while (fscanf($file, '%d%d%d', $a, $b, $c)) {
并确定CSV文件中所有3列的最大值和最小值。有没有办法在PHP中这样做?有人请指导我正确的方向。
答案 0 :(得分:0)
如果只将两个参数传递给fscanf
,它会将解析后的值作为数组返回,因此您应该可以执行以下操作:
$colCount = getColumnCount ($file); //left as an exercise
$pattern = str_repeat ('%d', $colCount);
while ($values = fscanf ($file, $pattern)) {
...
}
我已按照您的描述制定了$pattern
,但您可能需要将其与CSV文件的格式相匹配。例如,如果您的文件使用逗号分隔符,则您的模式可能需要看起来像str_repeat("%d,", $colCount)
。