我的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中?)
答案 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;
}