2017-09-22 33 views
0

我想從CSV刪除當前迭代行文件從CSV文件當前迭代行, 假設我有5行(1,2,3,4,5)到我的CSV文件,我打開文件,同時使用foreach逐一迭代行,當涉及到第3行時,第3行應該從CSV文件中刪除,其他1,2,4,5行將在相同的情況下相同。我不想使用像跳過第3個字段並將其保存到另一個文件中,而不是像重命名文件名。所以,請任何人都可以幫助我如何在PHP中做到這一點?刪除PHP

假設,像SQL命令一樣刪除當前行,PHP中是否有任何東西?

謝謝。

+0

讀文件到陣列中,未設置的行,並將其寫回 – SubjectDelta

+0

你爲什麼對閱讀的文件,並寫入一個新的文件減去你想放棄的行?在處理較大的文件時,應該以這種方式避免任何內存問題。 – X33

+0

最好的方法應該是對文件進行備份,讀取並將修改寫入第一個文件。所有的快樂! – SubjectDelta

回答

0

您需要擁有寫入文件的權限。如果您刪除了一行,您將不得不保存該文件。由於你不想有任何空行,你需要閱讀整個文件。

我建議獲取文件內容,並將其按行分割成數組。使用爆炸功能,您可以通過換行來拆分內容,很可能是「\ 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); 

檢查破滅/爆炸PHP函數文檔:

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

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

+0

更好地使用[PHP_EOL](http://php.net/manual/en/reserved.constants.php#constant.php-eol)作爲行尾 – SubjectDelta

+0

@natheriel我想在迭代之前刪除第三行根據我的要求排第四和第五排。那有可能嗎? – Naveen

+0

好點,更改代碼以使用PHP_EOL – natheriel