0

我有一个使用 fgetcsv 函数并遍历 csv 文件直到结束的 while 循环。在循环中,我想将特定列中的值添加到新数组中。

一切正常,因为它与我需要的列中的值相呼应。但是,当我将行添加到数组中时,它不起作用。我有一个在 PHP 代码之后打印的 HTML 表,但是当我使用该行添加到数组时它不起作用。

我在网上看过,我所看到的一切都是按照我的方式做的,所以我有点困惑。

这是我的代码:

$amountRecords = 0;
$totalValue = 0;
$valueArray = array();

$handle = fopen('data.csv', 'r');
// to skip the header names/values 
fgetcsv($handle);

while($row = fgetcsv($handle, "\r"))
{

    $valueArray[$amountRecords] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING
    $totalValue = $totalValue + $row[1];
    $amountRecords++;

}
4

2 回答 2

2

您的代码有些奇怪。您$amountRecords每次都在递增,因此您永远不会$valueArray两次访问相同的索引,但是,您正在为每个元素添加值。可能您只是想用$valueArray[$amountRecords] = $row[1];而不是分配值+=

如果是这种情况,看起来您只是试图将项目添加到数组的末尾,将第 1 列提取到它自己的数组中。您应该为此使用array_pushorarray[]=语法:

while($row = fgetcsv($handle, "\r"))
{
    // Add $row[1] to the end of $valueArray
    $valueArray[] = $row[1];

    $totalValue = $totalValue + $row[1];
}

运算符用于将某些内容+=添加到现有值。键入a += b与键入相同a = a + b。您应该在下一行使用该运算符,例如:

 $totalValue += $row[1];

作为最后的建议,学习做一些基本的调试。如果你的循环不工作,让它在每次迭代期间向你展示它在做什么。用于var_dump检查您的变量并确保它们实际上包含您认为它们包含的内容。使用var_dump($row)在确保这$row[1]是正确的索引方面特别有用。

echo "Before loop\n";

while($row = fgetcsv($handle, "\r"))
{
    echo '$row contains: ';
    var_dump($row);

    $valueArray[] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING

    echo '$valueArray now contains ':
    var_dump($valueArray);

    $totalValue = $totalValue + $row[1];
}

echo "After loop\n";
于 2012-08-18T14:08:38.850 回答
0

根据我对您的脚本的理解,$valueArray[$amountRecords] += $row[1];它没有任何逻辑意义,因为它依赖于$amountRecords ++;哪个总是会增加。

我认为您的脚本会像这样正常工作

while ( $row = fgetcsv($handle, "\r") ) {

    $valueArray[] = $row[1]; // Put all Row[1] Into a array
    $totalValue += $row[1]; // Sum total Value 
    $amountRecords ++; //Get Record Count
}
于 2012-08-18T14:17:00.637 回答