Работа с данными в формате 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.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
В цикле же идет запись данных в файл с помощью функции 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-оформление для выводимой информации, а не довольствоваться таблицей с серой рамкой:)
На этом все, успехов вам!
С уважением, Дмитрий
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также:
PHP: Получение информации об объекте или классе, методах, свойствах и наследовании |
|
Функции обратного вызова, анонимные функции и механизм замыканий |
|
Деструктор и копирование объектов с помощью метода __clone() |
|
Эволюция веб-разработчика или Почему фреймворк - это хорошо? |
|
Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.) |
|
PHP: Удаление элементов массива Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:— Разгрузит мастера, специалиста или компанию; — Позволит гибко управлять расписанием и загрузкой; — Разошлет оповещения о новых услугах или акциях; — Позволит принять оплату на карту/кошелек/счет; — Позволит записываться на групповые и персональные посещения; — Поможет получить от клиента отзывы о визите к вам; — Включает в себя сервис чаевых. Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе |
|
50 классных сервисов, программ и сайтов для веб-разработчиков |