如何使用PHP从CSV文件中删除重复行

时间:2013-07-01 13:46:20

标签: php csv

我的CSV文件如下所示:

account, name, email,
123, John, dsfs@email.com
123, John, dsfs@email.com
1234, Alex, ala@email.com

我需要删除重复的行。我尝试这样做:

$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.我从重复行清理CSV文件 2.我可以列出一些重复的列表(可能将它们存储在另一个CSV中?)

3 个答案:

答案 0 :(得分:4)

简单的解决方案,但如果文件非常大,则需要大量内存。

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

答案 1 :(得分: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())仅匹配完全相同的重复行。

已更新,以包含我的评论中的信息。

答案 2 :(得分:1)

如果您要从CSV循环数据,我认为最好这样做。

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