Конвертер CSV ↔ JSON
CSV у масив обʼєктів за заголовками і назад. Кома, крапка з комою або таб.
Робить із вивантаження таблиці дані, які можна обробити в коді
Експорт із CRM, звіт із рекламного кабінету чи таблиця з Google Sheets приходять як CSV, а далі їх треба покласти в базу чи порівняти з даними API. Конвертер розбирає CSV з обраним роздільником, бере перший рядок як назви полів і віддає JSON; у зворотний бік будує CSV, який відкриється в Excel.
fgetcsv і fputcsv знають правила RFC 4180: лапки навколо значень із роздільником, подвоєння лапок усередині, переноси рядків у полях. Роздільник передається аргументом. Пишіть саме через них, а не через explode та implode, інакше перший адрес із комою зламає файл.
$handle = fopen('jobs.csv', 'r');
$headers = fgetcsv($handle, separator: ';');
$rows = [];
while (($line = fgetcsv($handle, separator: ';')) !== false) {
$rows[] = array_combine($headers, $line);
}
// [['title' => 'Senior PHP', 'city' => 'Київ', 'salary' => '4000'], …]
$out = fopen('php://output', 'w');
fwrite($out, "\xEF\xBB\xBF"); // BOM, щоб Excel прочитав UTF-8
fputcsv($out, ['title', 'city'], ';');
Що питають про цей інструмент
Українська локаль Windows використовує крапку з комою як роздільник, бо кома зайнята десятковими. Експортуйте з ; або додайте перший рядок sep=, який Excel розуміє як підказку. Ще Excel хоче BOM на початку файлу, щоб правильно прочитати UTF-8.
Таке значення має бути в лапках, а лапка всередині подвоюється: "Львів, вул. Франка, 5". Так каже RFC 4180, і саме так робить fputcsv. Якщо файл писали через implode, він не CSV, а щось схоже.
fgetcsv читає по рядку, тому файл на гігабайт обробляється в циклі без проблем. Для зручностей на кшталт заголовків як ключів і ітераторів є league/csv; він теж працює потоково.