转换csv php上的未定义偏移量

时间:2013-03-08 16:47:33

标签: php csv

我有一个转换csv文件的小问题,

该文件正在转换,但正在收到通知

注意:未定义的偏移量:2英寸 注意:未定义的偏移量:

中的4

另外我需要按$ row分组[2]这可能吗?

<?php

$tsvFile = new SplFileObject('file.csv');
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl("\t");

$file = fopen('file2.csv', 'w');
$header = array('col1', 'col2');
fputcsv($file, $header, ',', '"');

foreach ($tsvFile as $line => $row) {
    if($line > 0) {
        fputcsv($file, array($row[2], $row[4]), ',', '"');
    }
}
fclose($file);

?>

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果某些行在分隔时有4个值(列)但其他行只有1个怎么办?您的代码假定固定数量的$ row []元素。如果你执行isset($row[2])并且它返回false,那么你知道你不应该尝试访问它,这是导致通知的原因。

至于为什么没有为该偏移分配值,我不能不看CSV。我发现逗号比分隔符更好地作为分隔符 - 也许你也有:)

不完全确定我知道'group by'的意思。您可以轻松地在foreach中添加一个运行总计,或者使用其中一个列作为维度,使用每个维度的总数在另一个数组中保留计数。