1

我在转换 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);

?>

任何帮助表示赞赏。

4

1 回答 1

1

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

至于为什么没有分配给该偏移量的值,我不能在没有看到 CSV 的情况下说。我发现逗号作为分隔符比制表符更有效——也许你也有:)

不完全确定我知道您所说的“分组依据”是什么意思。您可以轻松地在 foreach 中添加一个运行总计,或者使用其中一列作为维度在另一个数组中保留一个计数,每个维度的总数。

于 2013-03-08T16:56:42.620 回答