从PHP

时间:2017-09-22 11:48:34

标签: php file delete-row

我想从CSV文件中删除当前的迭代行, 假设我的CSV文件中有5行(1,2,3,4,5),我在使用foreach逐个迭代行时打开了我的文件,当涉及到第3行时,则应从CSV文件中删除第3行和其他1,2,4,5行在相同的时候是相同的。我不想像Skip the 3rd iterration一样使用它并将其保存到另一个文件中,而不是重命名文件名。所以,请任何人都可以帮助我在PHP中如何做到这一点?

假设像删除当前行的SQL命令一样,PHP中有什么东西吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您需要具有写入文件的权限。如果删除一行,则必须保存该文件。由于您不希望任何空行,您需要读取整个文件。

我建议获取文件内容,然后按行将其拆分为数组。使用爆炸功能,您可以通过换行符拆分内容,很可能是“\ n”。因此,将包含将包含csv文件的每一行的数组。现在,您可以在将更改的内容保存回csv文件之前,从数组中删除该行并从中创建一个字符串。

// get csv content into string variable
$csvContent = file_get_contents(__DIR__ . "/yourfile.csv");
// create array out of csv, limited by PHP_EOL wich determines the systems line break
// this means, every line in the csv file will be represended by an array key and its value
$csvArray = explode(PHP_EOL, $csvContent);

// unset the 3th csv line. 
unset($csvArray[2]); // keep in mind array starts at 0, so third line is array key 2 

// from here on you can manipulate the array $csvArray as you like. 
// add lines, remove lines or just use the given content for future operations. 
// you can also iterate over the array with: foreach ($csvArray as $line => $value) {}

// create string out of modified csv array
$csvContent = implode(PHP_EOL, $csvArray);
// save result back into the csv file
file_put_contents( __DIR__ . "/yourfile.csv", $csvContent);

检查implode / explode php function docs:

http://php.net/manual/en/function.implode.php

http://php.net/manual/en/function.explode.php