簡體   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