Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


Работа с данными в формате 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-оформление для выводимой информации, а не довольствоваться таблицей с серой рамкой:)

На этом все, успехов вам!

С уважением, Дмитрий Науменко

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх