我有一个使用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++;
}
答案 0 :(得分:2)
您的代码有些奇怪。您每次都会递增$amountRecords
,因此您永远不会在$valueArray
中访问相同的索引两次,但是,您为每个元素添加值。可能您只是想用$valueArray[$amountRecords] = $row[1];
而不是+=
来分配值?
如果是这种情况,看起来你只是试图将项添加到数组的末尾,将第1列提取到自己的数组中。您应该使用array_push
或array[]=
语法:
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
}