Объедините два файла Excel в PHP с условиями - PullRequest
0 голосов
/ 19 мая 2019

У меня есть два файла Excel:

test1.csv

ID  Name    Price
Q1  Quail   100
Q2  Quail   200
Q3  Quail   300

test2.csv

ID  Name    Price
Q1  Quail   100
Q4  Quail   400
Q2  Quail   500

Я хочу объединить эти файлы, поэтому, если одинаковыеИдентификатор существует в обоих файлах, он будет принимать дату из test2.csv.Остальная часть IDS будет брать данные из файла, который существует.Я пишу код для этого и работает хорошо.

function combine($csvs){

    if (empty($csvs[0])) {die ("please specify main csv file as a parameter\n");}
    // combine csv files from parallel processes while skipping duplicates
    $ls = $csvs;
    if (!empty($ls)) {
        print "CSV files to be processed:\n";
        print_r($ls);
        $visited = array();
        $csvout = fopen("combined.csv", "w");
        $wrote_header = false;
        $cnt = 0;
        foreach ($ls as $csv) { // foreach file from an extraction process
            $csv = trim($csv);
            print "combinig $csv\n";
            $csvfp = fopen ($csv, "r");
            $head = fgetcsv ($csvfp); // skipping header
            if (empty($wrote_header)) {
                fputcsv($csvout, $head); 
                $wrote_header = true;
            }
            while ($row = fgetcsv ($csvfp)) {

                $sku = $row[0];print_r($sku);
                if (empty($sku)) $sku = $row[1];
                if (empty($visited[$sku])) fputcsv($csvout, $row);
                $visited[$sku] = 1;
                $cnt++;
                if ($cnt%5000 == 0) print "processed $cnt products, saved ".count($visited)." products\n";
            }
            fclose ($csvfp);
        }   
        print "saved ".count($visited). " records\n";
        unset ($visited);
        #$command = "rm -f {$csv_file}_*";
        #print $command."\n";
        #exec ($command);
        fclose($csvout);
    } else print "no csv file";
}

Я называю эту функцию следующим образом:

$csvs =  array('test2.csv','test1.csv');
combine($csvs);

И вот результат, который я получаю:

в сочетании.csv

ID  Name    Price
Q1  Quail   100
Q4  Quail   400
Q2  Quail   500
Q3  Quail   300

Прекрасно работает.Однако я хочу добавить в свой код некоторые дополнительные условия для IDS, которые существуют в обоих файлах.

Если цена из test2.csv больше или меньше от цены из test1.csv на 20%, тогда возьмитецена от test1.csv

Любая помощь, как я могу это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...