Решил проблему: все, что мне нужно было сделать, это добавить разделитель в fgetcsv while (false !== ($data = fgetcsv($ih,10000,';')))
Мы получили файл от нашего поставщика. Файл содержит 60 тыс. Строк, и нам нужно каким-то образом автоматически его фильтровать.
В файле csv есть 3 столбца: SKU, Category, Price. Я отфильтровал этот файл с помощью Excel и вижу, что нам нужно только около 700 продуктов из этого файла. Все они имеют одну и ту же категорию «Инъекторы»
Я написал скрипт php, но он выдает пустой вывод. Может кто-нибудь объяснить, что не так с моим кодом?
<?php header('Content-type: text/plain; charset=utf-8');
$input = 'C:\Users\Administrator\Desktop\Data.csv';
$output = 'C:\Users\Administrator\Desktop\Data_changed.csv';
$myfile = fopen("C:\Users\Administrator\Desktop\data_log.txt", "w") or die("Something wrong with this file.");
$vname='The process was successful: '.date('Y-m-d').' day';
fwrite($myfile, $vname);
fclose($myfile);
$injector = "Injector";
if (false !== ($ih = fopen($input, 'r'))) {
$oh = fopen($output, 'w');
while (false !== ($data = fgetcsv($ih))) {
if (strpos($data[1], $injector) !== false) {
// this is where you build your new row
$outputData = array($data[0], $data[1], $data[2]);
fputcsv($oh, $outputData);
}
}
fclose($ih);
fclose($oh);
}
?>
Ожидаемый результат - 700 отфильтрованных продуктов.
Вот так выглядит CSV-файл:
Пример данных примера
По сути, я хочу создать скрипт, который найдет все строки, содержащие текст «Инжектор» во втором столбце.
Также стоит упомянуть: оригинальный файл поставляется с точкой с запятой в качестве разделителя. Разделителем по умолчанию для окон является запятая.