1

我有 104 个字段的 csv 文件,但我只需要 4 个字段在 mysql 数据库中使用。每个文件大约有一百万行。有人可以告诉我有效的方法吗?将每一行读取到数组需要很长时间。谢谢

4

1 回答 1

0

根据定义,您必须完整阅读每一行。这是为下一条记录找到分隔符(即换行符)所必需的。您只需要丢弃您已读取的不需要的数据。例如:

$data    = array();
$fh      = fopen('data.csv', 'r');
$headers = fgetcsv($fh);

while ($row = fgetcsv($fh)) {
    $row    = array_combine($headers, $row);
    $data[] = array_intersect_key($row, array_flip(array('foo', 'bar', 'baz')));

    // alternatively, if you know the column index, something like:
    // $data[] = array($row[1], $row[45], $row[60]);
}

这仅保留foo、bar 和 baz 列并丢弃其余列。从文件( )中读取的fgetcsv速度差不多。如果您需要它更快,则必须实现自己的 CSV 标记器和解析器,它会跳过您不需要的列,甚至无需将它们临时存储在内存中;这带来了多少性能提升与实现这个无错误所需的开发时间是非常值得商榷的。

简单的 excel 宏可以在一秒钟内删除所有不必要的列(104 列中的 100 列)。我正在寻找类似的解决方案。

这是因为 Excel 一旦打开文件,所有数据都在内存中,并且可以非常快速地对其进行操作。为了进行准确的比较,您需要比较在 Excel 中打开文件 + 删除列所花费的时间,而不仅仅是删除列。

于 2013-06-17T12:42:03.027 回答