Я пытаюсь объединить два CSV-файла, взять одно поле из первого CSV-файла и одно поле из второго, но когда я сделаю это, вернется только первая / вторая строка второго файла.
<code>if ($ext1 == 'csv' && $ext2 == 'csv') {
$path1 = ROOT . "/uploads/" . md5(uniqid()) . ".csv";
$path2 = ROOT . "/uploads/" . md5(uniqid()) . ".csv";
$file1 = $_FILES['upload']['tmp_name'];
$file2 = $_FILES['upload2']['tmp_name'];
move_uploaded_file($file1, $path1);
move_uploaded_file($file2, $path2);
$file1 = fopen($path1, 'r');
$file2 = fopen($path2, 'r');
if (file_exists($path1) && file_exists($path2)) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="sample.csv"');
$output_name = md5(uniqid()) . ".csv";
$output = ROOT . "/uploads/output/" . $output_name;
$fp = fopen($output, 'wb');
fputcsv($fp, array('campaign', 'spent', 'payout', 'profit', 'roi'), ',');
$found_campaigns = [];
fgetcsv($file1); // Skip first line
while (($data = fgetcsv($file1)) !== FALSE) {
array_push($found_campaigns, $data[$campaign]);
echo "<pre>";
var_dump($found_campaigns); // Showing the found campgains
echo "
";
echo "";
// Проверяем, имеют ли второй файл то же самое имя кампании с первым именем файла, если да, возьмите поле выплат и объедините их с использованным полем.
// возвращаем только данные двух первых строк (нужно вернуть все равные поля)
$ found_in_file_2 = false;
$ pout = '';
while (($ data2 = fgetcsv ($ file2))! == FALSE &&! $ found_in_file_2) {
var_dump ($ data2); // Показывать поля второго файла, если название кампании совпадает с названием кампании первого файла
if ($ data2 [$ campaign2] == $ data [$ campaign]) {
$ found_in_file_2 = true;
$ pout = $ data2 [$ payout];
}
}
$ pout = str_replace ('$', '', $ pout);
$ line = [
$ данных [$ кампании],
$ данных [$ потратили],
$ Дуться,
$ pout - $ data [$ lost],
($ pout - $ данные [$ потрачено]) / $ данные [$ потрачено]
];
fputcsv ($ fp, $ line, ',');
}
$ file1 = fopen ($ path1, 'r');
$ file2 = fopen ($ path2, 'r');
fgetcsv ($ file2); // Пропустить первую строку
while (($ data = fgetcsv ($ file2))! == FALSE) {
if (! in_array ($ data [$ campaign2], $ found_campaigns)) {
$ found_in_file_1 = false;
$ spt = '';
while (($ data2 = fgetcsv ($ file1))! == FALSE &&! $ found_in_file_1) {
if ($ data2 [$ campaign] == $ data [$ campaign2]) {
echo $ data2 [$ campaign]. ''. $ data [$ campaign2]. '
';
$ found_in_file_1 = true;
$ spt = $ data2 [$ потрачено];
}
}
$ spt = str_replace ('$', '', $ spt);
$ pout = $ data [$ payout];
$ pout = str_replace ('$', '', $ pout);
if ($ spt> 0) {
$ roi = ($ pout - $ spt) / $ spt;
} еще {
$ roi = 0;
}
$ line = [
$ данных [$ campaign2],
$ SPT,
$ Дуться,
$ pout - $ spt,
$ рои
];
fputcsv ($ fp, $ line, ',');
}
}
fclose ($ FP);
$ сейчас = дата ("d_m_Y H: i", время ());
echo '
Загрузить объединенный файл ';
}
}
Содержание файлов
Первый файл (нужно получить потраченное поле - работает):
Campaign ID Campaign Name Impressions Rate Cost
4833222 ZroJumiaNGMob1 15335 0.00014 2.1469
4833236 ZroJumiaNGMob2 36921 0.00015 5.53815
4877020 ZroJumiaNGMob3 781926 0.00015 117.2889
4948833 ZroJumiaNGMob4 900899 0.00026 234.23374
4984715 ZroJumiaNGMob5 440423 0.00021 92.48883
4984722 ZroJumiaNGMob6 542272 0.00024 130.14528
Второй файл (нужно получить поле выплат и поставить их в одну строку - не работает):
Offer.name name Stat.impressions Stat.conversions Stat.clicks payout
Aliexpress Online Store - revShare International ZroJumiaNGMob1 0 205 83598 47.4551
Aliexpress Online Store - revShare International ZroJumiaNGMob2 0 13 12080 1.6562
Aliexpress Online Store - revShare International ZroJumiaNGMob3 0 50 14750 13.0269
Aliexpress Online Store - revShare International ZroJumiaNGMob4 0 17 7108 3.5583
Aliexpress Online Store - revShare International ZroJumiaNGMob5 0 25 11045 2.1942
Aliexpress Online Store - revShare International ZroJumiaNGMob6 0 70 27187 12.3148