繁体   English   中英

在foreach中删除CSV行

[英]Delete csv lines in foreach

我的清单很大,如何将foreach中的每个循环从文件“ list.csv”中排除通过foreach的那一行?

$myGetCsv = function ($str) {
    return str_getcsv($str, ';');
};    

$lines = array_map($myGetCsv, file(''.get_template_directory_uri() . '/list.csv'));     

foreach($lines as list($var1, $var2)) {
    //CODE
}

例:

原始文件:

test1, subtest1;  // test1 is $var1 and subtest1 is $var2
test2, subtest2;
test3, subtest3;

第一个foreach之后的list.csv

test2, subtest2;
test3, subtest3;

第二个foreach之后的list.csv

test3, subtest3;

第三个foreach之后的list.csv

empty

根据注释中的澄清,似乎您试图从文件中删除行的唯一原因是因为您无法将整个文件加载到内存中,并且希望在多次执行脚本时解析大文件。

如果上面的陈述是正确的,简短的答案是您不必将整个文件加载到内存中。

您可以使用类SplFileObject遍历整个文件。 只要确保在循环中您没有将行缓存在内存中,而是将其保存到数据库等新目标即可。

例:

$file = new SplFileObject('/path/to/file/list.csv');
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');

// Iterate through the whole file reading on line at a time
foreach ($file as $row) {
    list($var1, $var2) = $row;

    // Do what you want her but do not keep row info in memory
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM