Php 删除foreach中的csv行

Php 删除foreach中的csv行,php,csv,foreach,fopen,Php,Csv,Foreach,Fopen,我有一个很大的列表,如何将foreach中的每个循环从通过foreach的文件'list.csv'中排除 $myGetCsv = function ($str) { return str_getcsv($str, ';'); }; $lines = array_map($myGetCsv, file(''.get_template_directory_uri() . '/list.csv')); foreach($lines as list($var1, $var2

我有一个很大的列表,如何将foreach中的每个循环从通过foreach的文件'list.csv'中排除

$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

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

如果上面的陈述是准确的,那么简短的回答是您不必将整个文件加载到内存中

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

例如:

$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
}

也就是说,总是删除文件的第一行吗?@felipsmartins是的,总是first@felipsmartins很好,它必须匹配foreach中刚刚传递的行,该行在foreach中再也不能传递了列表有多大?根据大小,只需调用
file()
函数,然后调用
array\u shift()
,然后调用
file\u put\u内容(join(“\n”,$lines))
或类似的操作…大约5000行谢谢!请注意,当我调用函数时,如何在再次调用函数时不将行保留在内存中?不要将
$row
中的数据保存到另一个变量中。例如:
$lines[]=$row
。出现此错误
SplFileObject::rewind():stream不支持查找
我试图用您遇到的原始问题引导您找到正确的方向,但恐怕我无法帮助解决脚本的其余部分。请参阅php文档或google,以了解出现的更多错误。祝你好运