Сравнение 2 csv файлов

218
31 января 2018, 15:16

Здравствуйте, имеются csv файлы Главный файл из которого нужно брать значения для поиска в других, и файлы в которых нужно искать значения из главного файла Файлы вида:

первый(главный) -

Заголовок1, Заголовок2, ФИО ,   заголовок3, Дата регистрации, Заголовок 4..тд..
 val , val, Иванов Иван Иванович , val  , 19.01.2014    , val   
 val , val, Петров Петр Петрович , val  , 11.05.2017    , val
 val , val, Никифоров Валентин Семенович , val  , 29.01.2017    , val

второй -

Заголовок1;Заголовок2;заголовок3;Фамилия;Имя;Отчество; Дата регистрации;Заголовок 4..тд.
val ; val ; val; Склифосовский;Андрей;Валентинович;18.09.2016;  val;
val ; val ; val; Никифоров;Валентин;Семенович; 29.01.2017; val;
val ; val ; val; Кубриков;Иван;Александрович; 09.03.2017; val;

вот что я пытался: считать файлы, разложить в массивы и потом уже сравнивать, получал странные результаты или ложил сервер т.е мне нужно: ФИО и дату регистрации сравнивать с тем же самыми параметрами из 2го файла,как видно во 2 файле фио берется из 3х колонок, подскажите как правильно это реализовать?

$data = File("text.csv");
for ($i = 0; $i < count($data); $i++)
{
    $head[] = explode(",", $data[$i]);
}
echo "<pre>";
 //print_r($head);
echo "</pre>";
/*сверху главный файл, снизу остальное, тк разные разделители*/
$data2 = File("test2.csv");
for ($i = 0; $i < count($data2); $i++)
{
    $array[] = explode(";", $data2[$i]);
}
echo "<pre>";
 //print_r($array);
echo "</pre>";
$count_no=0;

foreach($head as $key => $value) // перебираю первый массив для того чтоб перебрать вложенные и извлеч ФИО
{
    foreach ($value as $k => $val) //перебираю вложенные масивы т.е там где есть все данные ФИО , дата для того чтоб сравнить в следующем цикле с другим файлом
    {
        // echo $k.$val."</br>";
        foreach ($array as $kl => $arr)//пытаюсь сравнить значения из прошлого цикла с новым файлом
        {
            if ($val[6]==$arr[7]) { //дата регистрации 
                echo "found</br>";
            } else $count_no++;
        }
    }
    echo "<pre>";
    print_r($count_no);
    echo "</pre>";
}
Answer 1

Откройте оба файла через fopen и прочитайте их через fgetcsv, при этом учитывайте, что в первом файле не дефолтный разделитель.

 $file1=fopen('test1.csv','r');
 $row=0;
 while (($data = fgetcsv($file1, 1000, ",")) !== FALSE) {
    //тут необходимо заполнить первый массив данными из файла, например
    $data1[$row]['header1']=$data[0]; // индекс может быть другой, каюсь - не помню точно.
    $data1[$row]['header2']=$data[1];
    $data1[$row]['fio']=$data[2];
    $data1[$row]['register_date']=$data[3]
   // и т.д.
   $row++;
}

Затем точно такая же операция, для другого файла, но у него другой разделитель, т.е. нужно так fgetcsv($file2, 1000, ";")

Далее можно или разбить ФИО на 3 части из первого файла и искать по частям, а можно сделать дополнительную строку в массиве для поиска путем склейки 2х колонок ФИО+дата регистрации из первого файла и 4х колонок из второго файла (чтобы просто искать по 1й колонке, а не по 4м)

Для первого файла

 $data1=('trim',$data1);
 foreach ($data1 as $data_key=>$data_value) {
  $data1[$data_key]['fio_data']=$data_value['fio'].' '.$data_value['register_date'];
 }

И аналогично для второго, только с большим количеством колонок.

Затем берете foreach и прокручиваете оба массива с сравнением по этой колонке.

READ ALSO
Парсить ссылку при переходе на сайт

Парсить ссылку при переходе на сайт

решил сделать партнерку, вот такого вида ссылка https://mysitecom/p644320/vip , где p644320 - это id того, кто привлекает, как мне при переходе на мой сайт обрабатывать...

153
запрос POST с сервера Node.js для PHP

запрос POST с сервера Node.js для PHP

Товарищи, скажите что делаю не так?

181
WooCommerce+WP Job Manager в My Account не работает pagination

WooCommerce+WP Job Manager в My Account не работает pagination

Есть 2 известных плагина: WooCommerce, WP Job ManagerПри отображении списка вакансий или резюме в админке пользователя (Используется админка Woo) не работает...

199
Конвертер систем счисления на php?

Конвертер систем счисления на php?

Помогите разобраться в основах1 байт = 8 бит В 1 байте может максимум уместиться максимум 255 значений

159