PHP массив в файл CSV

PHP массив в файл CSV

Пример как преобразовать массив в CSV и сохранить его диске или отдать на скачивание.

Имеем массив $prods:

$prods = array(
	array(
		'id' => '697',
		'name' => 'Динамический ортез-стоподержатель',
		'category' => 'Ортезы',
		'price' => '35990 RUB',
	),    
	array(
		'id' => '698',
		'name' => 'Бандаж на коленный сустав',
		'category' => 'Ортезы',
		'price' => '3610 RUB',
	),    
	array(
		'id' => '699',
		'name' => 'Бандаж на плечевой сустав',
		'category' => 'Ортезы',
		'price' => '3700 RUB',
	),
);
PHP

Также массив можно заполнить данными из БД:

// Подключение к БД.
$dbh = new PDO('mysql:dbname=НАЗВАНИЕ_БД;host=localhost', 'ЛОГИН', 'ПАРОЛЬ');

$sth = $dbh->prepare("SELECT * FROM `prods`");
$sth->execute();
$array = $sth->fetch(PDO::FETCH_ASSOC);

$prods = array();
foreach($array as $row) { 
	$prods[] = array(
		'id'       => $row['id'],
		'name'     => $row['name'],
		'category' => $row['category'],
		'price'    => $row['price'],
	);
} 
PHP

Преобразуем массив в CSV с помощью функции fputcsv(), в качестве разделителя используется ;.

Отдача файла на скачивание

header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=file.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$buffer = fopen('php://output', 'w'); 
fputs($buffer, chr(0xEF) . chr(0xBB) . chr(0xBF));
foreach($prods as $val) { 
	fputcsv($buffer, $val, ';'); 
} 
fclose($buffer); 
exit();
PHP

Сохранение файла на сервере

$buffer = fopen(__DIR__ . '/file.csv', 'w'); 
fputs($buffer, chr(0xEF) . chr(0xBB) . chr(0xBF));
foreach($prods as $val) { 
	fputcsv($buffer, $val, ';'); 
} 
fclose($buffer); 
exit();
PHP

Строка fputs($buffer, chr(0xEF) . chr(0xBB) . chr(0xBF)); добавляет в начало файла метку BOM, благодаря этому файл откроется в Excel с нормальной кодировкой.

Результат

Содержание файла file.csv

697;"Динамический ортез-стоподержатель";Ортезы;"35990 RUB"
698;"Бандаж на коленный сустав";Ортезы;"3610 RUB"
699;"Бандаж на плечевой сустав";Ортезы;"3700 RUB"

Открытый в Excel

PHP масив в файл CSV

14.06.2019, обновлено 17.12.2022
15211

Комментарии 1

Eugene V Eugene V
5 декабря 2022 в 13:32
Добрый день
Пытаюсь массив заполнить данными из БД, но второй день ломаю голову.
Получаю ответ:
Trying to access array offset on value of type null
и смещение рядка "Illegal string offset"
Не могу понять в чем причина. Сможете подсказать?

, чтобы добавить комментарий.

Другие публикации

Обзор PHP расширений для чтения файлов Excel
В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры...
56887
+2
Чтение Google таблиц в PHP
Как получить данные из Google spreadsheets в виде массива PHP? Очень просто, Google docs позволяет экспортировать лист в формате CSV, главное чтобы файл был в общем доступе.
22795
+6
Редактирование файла в PHPExcel
Иногда бывают случаи, когда нужно заполнить некий уже сформатированный xls-файл в PHP. Библиотека PHPExcel тоже это...
3770
-1
Excel: Как умножить все выделенные ячейки на число
Задача: В прайс-листе необходимо увеличить цены на 20%, при этом чтобы в листе не было формул.
13237
0
Экспорт данных из таблицы MySQL в Excel
Если нужно быстро и единоразово выгрузить данные из таблицы MySQL в Exel файл, то помогут следующие способы:
7417
+3
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28487
+8