Как отличить данные от файлов CSV
У меня есть два CSV-файла, и оба имеют одинаковую структуру данных.
ID - Join_date - Last_Login
Я хочу сравнить и получить точно совпадающие номера записей на основе этого примера:
в первых файлах содержится 100 записей, из которых 20 не включены во второй файл.
2-й файл имеет 120 записей.
Я хочу, чтобы скрипт на PHP сравнивал эти два файла и создавал два отдельных файла CSV.
И я хочу удалить все лишние записи из 2-го файла, которые не включены в первый файл.
И удалите все записи из первого файла, которые не включены во второй файл.
Спасибо
2 ответа
Есть утилита GNU comm
это будет действительно легко. Вы могли бы exec
что через php или просто сделать это напрямую. Если у вас нет доступа к comm
проще всего было бы сохранить оба файла в массиве (возможно, через file()
) и использовать array_intersect()
,
Вы можете попробовать это для ограниченного числа CSV-файлов. Если у вас очень большой CSV-файл, я бы посоветовал вам импортировать его непосредственно в MySQL.
function csvToArray($csvFile, $full = false) {
$handle = fopen ( $csvFile, "r" );
$array = array ();
while ( ($data = fgetcsv ( $handle )) !== FALSE ) {
$array [] = ($full === true) ? $data : $data[0]; // Full array or only ID
}
return $array;
}
$file1 = "file1.csv" ;
$file2 = "file2.csv" ;
$fileData1 = csvToArray($file1);
$fileData2 = csvToArray($file2);
var_dump(array_diff($fileData1,$fileData2));
var_dump(array_intersect($fileData1,$fileData2));