在while循环中添加数组的麻烦

时间:2012-08-18 14:04:45

标签: php arrays while-loop

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

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

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

这是我的代码:

$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++;

}

2 个答案:

答案 0 :(得分:2)

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

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

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";

答案 1 :(得分: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
}