
Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс "Практика HTML5 и CSS3"
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
*Наведите курсор мыши для приостановки прокрутки.
Работа с данными в формате CSV
В этой заметке мы разберем два момента, касающихся работы с данными в формате CSV. Мы рассмотрим, как генерировать CSV-файл, обладая некими исходными данными и увидим, как вывести данные формата CSV на экран.
Данная заметка не претендует на исчерпывающее руководство, однако может стать хорошим стартом, если вы впервые столкнулись с подобной задачей.
1. Генерация CSV-файла (данных, разделенных запятыми)
Первое, что мы рассмотрим - это создание CSV-файла из уже имеющихся у нас данных. Допустим, мы получили некую информацию из базы в формате обычного многомерного массива и хотим записать эти данные в CSV-файл, который потом можно будет открыть любой офисной программой для работы с таблицами.
Пример того, что мы должны получить:

Итак:
// Формируем массив с исходными данными для записи в файл $sales = array (array('Москва','2015-09-01','2015-10-01',345.78), array('Екатеринбург','2015-09-01','2015-10-01',235.54), array('Владивосток','2015-09-01','2015-10-01',187.2), array('Пермь','2015-09-01','2015-10-01',215.31), array('Все регионы','','',983.83)); // Указываем путь до файла $filepath = 'sales.csv'; // Открываем файл на запись и заносим результат в дескриптор $fo = fopen ($filepath, 'w') OR die ("Невозможно открыть $filepath"); // В цикле проходимся по каждому элементу исходного массива foreach ($sales as $sales_line) { if (fputcsv($fo, $sales_line) === false) { die ("Ошибка при записи в csv-файл"); } } echo "Данные были успешно записаны в файл $filepath"; // Закрываем файл после окончания записи в него fclose($fo) OR die ("Невозможно закрыть $filepath");
Как видите, изначально мы формируем массив с данными.
Затем создаем переменную с указанием пути до CSV-файла. Пока его нет, но он автоматически будет создан в процессе работы скрипта. В нашем случае файл лежит в той же папке, что и скрипт, который его создает.
Далее мы открываем файл на запись и заносим результат этой операции в специальный дескриптор - обычную переменную, которую мы будем чуть позже использовать при наполнении и при закрытии файла.
Отмечу также, что при попытке открыть на запись несуществующий файл он будет создан автоматически PHP-функцией fopen().
После этого нам остается совсем немного: проходимся в цикле по строкам формируемого CSV-файла, указав при этом, что при каждой итерации цикла мы должны занести значение из массива $sales в переменную $sales_line.
В цикле же идет запись данных в файл с помощью функции fputcsv(), которой мы передаем в качестве параметров тот самый дескриптор $fo и переменную $sales_line, которая последовательно хранит в себе все строки нашего будущего CSV-файла.
Для обработки возникающих ошибок мы используем условие, согласно которому функция fputcsv() будет остановлена в том случае, если операция завершится неудачей.
Если же все проходит так, как нужно, то после окончания цикла на экран будет выведено сообщнеие об успешной записи информации в файл.
Финальный аккорд - закрытие файла, после того, как мы закончили с ним работать.
Как видите, ничего сложного во всем этом процессе нет. Теперь давайте посмотрим, как можно вывести данные в формате CSV на экран (печать).
2. Вывод на экран (на печать) данных в формате CSV
Точно так же как и в первом случае, у нас есть некий исходный массив, который теперь нам нужно отобразить в браузере. Как это делается? Давайте посмотрим на код ниже.
// Формируем массив с исходными данными для вывода на экран $sales = array (array('Москва','2015-09-01','2015-10-01',345.78), array('Екатеринбург','2015-09-01','2015-10-01',235.54), array('Владивосток','2015-09-01','2015-10-01',187.2), array('Пермь','2015-09-01','2015-10-01',215.31), array('Все регионы','','',983.83)); // "Открываем" данные с использованием специального выходного потока $fo = fopen ('php://output', 'w'); echo "<table style = 'border: 1px solid silver'>"; // В цикле проходимся по каждому элементу исходного массива foreach ($sales as $sales_line) { echo "<tr><td style = 'border: 1px solid silver'>"; if (fputcsv($fo, $sales_line) === false) { die ("Ошибка при выводе строки CSV"); } echo '</td></tr>'; } echo '</table>'; // Закрываем "файл" после окончания вывода на экран fclose($fo);
Что мы делаем в этом коде после объявления массива?
Для вывода на экран нужно использовать так называемый "выходной поток" - php://output. Далее мы создаем простенькое форматирование для вывода данных в виде таблицы и, как и в первом случае, запускаем цикл foreach.
Как вы видите, все делается аналогично, только другое сообщение об ошибке. Внутри каждой итерации цикла мы закрываем ячейку и строку таблицы, а саму таблицу закрываем уже за пределами цикла, когда все данные будут выведены на экран.
В конце, после вывода на экран, закрываем "файл".
Вот и все - с обеими задачами мы справились легко и элегантно. Разумеется, во втором примере вы можете создать красивое html-оформление для выводимой информации, а не довольствоваться таблицей с серой рамкой:)
На этом все, успехов вам!
С уважением, Дмитрий Науменко
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: