Как отличить данные от файлов 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));
Другие вопросы по тегам