PHP - 动态参数和动态变量

时间:2013-10-01 22:56:39

标签: php

我是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中这样做?有人请指导我正确的方向。

1 个答案:

答案 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)