2013-07-01 33 views
-1

CSV文件中刪除重複的行我有CSV文件看起來像這樣:如何從用PHP

account, name, email, 
123, John, [email protected] 
123, John, [email protected] 
1234, Alex, [email protected] 

我需要刪除重複的rows.I嘗試做這樣的:

$inputHandle = fopen($inputfile, "r"); 
$csv = fgetcsv($inputHandle, 1000, ","); 

$accounts_unique = array(); 

$accounts_unique = array_unique($csv); 

print("<pre>".print_r($accounts_unique, true)."</pre>"); 

但我在print_r中只有第一個標題行。 什麼需要,以確保我 1.我從清理重複行 2.我可以讓這些重複的一些列表的CSV文件來完成(也許它們存儲在另一個CSV?)

+0

'fgetcsv'只有一行。如果你需要所有的行,你需要循環。 – deceze

+1

文件真的很大嗎? – sectus

回答

4

簡單的解決方案,但如果文件真的很大,它需要大量的內存。

$lines = file('csv.csv'); 
$lines = array_unique($lines); 
file_put_contents(implode(PHP_EOL, $lines)); 
+0

嗯,我想我需要更多的邏輯...我怎樣才能記錄重複行? – Alex

+0

順便說一句,當我運行此 – Alex

+0

@Alex時,重複項不會被刪除,如果您需要更多結果,請更新您的問題。 – sectus

1

我會走這條路線,這會比array_unique快:

$inputHandle = fopen($inputfile, "r"); 
$csv = trim(fgetcsv($inputHandle, 1000, ",")); 
$data = array_flip(array_flip($csv)); //removes duplicates that are the same 
$dropped = array_diff_key($csv, $data); //Get removed items. 

注 - array_unique()array_flip(array_flip())將只匹配重複的線路是正是相同。

已更新,以包含我的意見中的信息。

1

如果你打算從CSV中循環數據,我認爲最好是做這樣的事情。

$dataset = array(); 
foreach($line as $data){ 
    $dataset[sha1($data)] = $data; 
}