php чтение csv в массив

Чтение и запись в CSV на PHP

Обычно если стоимость создания интернет магазина достаточно высока, заказчики просят сделать импорт товаров из их прайс листов. Им необходимо чтобы была возможность не только добавлять новый товар на сайт, но и обновлять цены и количество на складе уже существующих товаров.

PHP как известно не умеет работать excel-файлами стандартными средствами. Конечно есть множество различных классов, которые могут читать и записывать информацию в excel, но с ними возникает достаточно много проблем (об этом мы напишем в следующих статьях).

Куда проще и удобней работать с csv-файлами.

Для примера сделаем небольшую программку. Она будет обрабатывать csv-файл сотрудников компании OX2.ru.

Создадим новую таблицу в Excel, содержащую следующие поля:

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Сохраним таблицу как csv-файл, с разделителем поля «;».

У нас должен получиться такой файл:

Ниже приведен исходный код с подробным описанием.

Код слелан на ООП с использованием классов, и при небольшой доработки может многократно использоваться в различных приложениях. Если вы не привыкли к программированию на классах, а используете функции или еще что-то, то настоятельно рекомендуем переучиваться ))

Так же в коде используется генерация исключений (Exception), о них читайте в следующих наших статьях.

Метод getCSV читает данные из csv файла, и возвращает двумерный массив следующего вида:

Пример достаточно простой, несмотря на то что получилось достаточно много кода.

И дальше с помощью цикла foreach обходим массив, и выводим в красивом виде содержимое csv файла.

Импорт данных из csv файлов будет полезен не только для обновление товаров в интернет-магазинах, но и для подгрузки/обновлении какой-либо информации на обычный сайт.

Например, мы разрабатывали сайт управляющей компании, и им требовалось ежемесячно публиковать информацию по счетчикам горячей и холодной воды. Все данные у них храняться в excel файлах. И тут прекрасно подошел csv формат!

При этом стоимость создания сайта останется не изменой, а функционал и автоматизация сайта будет на уровень выше чем у конкурентов.

Источник

fgetcsv — Читает строку из файла и производит разбор данных CSV

Описание

Список параметров

Должен быть больше самой длинной строки (в символах), найденной в CSV-файле (включая завершающий символ конца строки). Данный параметр стал необязательным в PHP 5. Если этот аргумент не указан (или равен 0 в версиях PHP 5.1.0 и выше), максимальная длина строки не ограничена, но функция работает немного медленнее.

Необязательный параметр delimiter устанавливает разделитель поля (только один символ).

Необязательный параметр enclosure устанавливает символ ограничителя поля (только один символ).

Необязательный параметр escape устанавливает экранирующий символ (только один символ).

Возвращаемые значения

Возвращает индексированный массив с прочтенными полями.

Замечание: Если у вас возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.

Список изменений

ВерсияОписание
5.3.0Добавлен параметр escape
5.1.0Параметр length стал необязательным. По умолчанию равен 0, что означает отсутствие ограничения длины.
4.3.5fgetcsv() теперь безопасна для обработки бинарных данных

Примеры

Пример #1 Чтение и вывод на экран содержимого CSV-файла

Примечания

Эта функция принимает во внимание настройки локали. К примеру, если LANG установлена в en_US.UTF-8, то файлы в однобайтовой кодировке будут неправильно прочитаны этой функцией.

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

Источник

CSV файлы на PHP — создание и чтение

Формат CSV

Чтобы понимать суть вещей, нужно разобраться в спецификации CSV файлов, как устроен формат. Давайте коротко.

CSV (Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных.

Каждая строка файла — это одна строка таблицы.

Это все что нужно знать, чтобы работать с CSV!

Пример для рус. языка:

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Пример для англ. языка:

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Wiki-справка

Большинство программ под CSV понимают более общий формат DSV (delimiter-separated values — значения разделённые разделителем), допускающий использование иных символов в качестве разделителя. В частности, в русской и других локалях запятая по умолчанию зарезервирована под десятичный разделитель. Поэтому как разделитель используется точка с запятой или табуляция (формат TSV).

Сегодня под CSV понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк. Это значительно затрудняет перенос данных из одних программ в другие, несмотря на всю простоту формата.

Создание CSV файла в PHP

Для создания CSV файла, достаточно создать текстовый файл, используя в нужных местах необходимые разделители столбцов и строк.

Важным моментом, является кодировка файла. Для корректного отображения кириллицы следует использовать кодировку cp1251 (windows-1251).

Разделитель колонок
Разделитель строк

Также, для разделения строки, может использоваться просто \n (перенос строки, LF). В этом случае, перенос строки внутри значения колонки должен обозначаться как \r (возврат каретки CR).

Функция для создания CSV файла

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив меню

Чтение CSV файла в PHP

Вариант на базе функции str_getcsv() :

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Если такую конвертацию нужно сделать программно, смотрите в сторону онлайн конвертеров с API или готовых библиотек.

Сталкивались с такой задачей и знаете более универсальный способ? Прошу поделиться в комментариях.

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Тема, конечно, интересная. Только этот код в реальных условиях работать не будет.

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

1) Разделитель поля может быть любой. Например, ‘\’, ‘|’ или ещё что похуже.
2) Символ ограничителя поля может быть как двойная, так и одинарная ковычка.
3) Неплохо бы использовать unset в коде. Память на сервере всё-таки не резиновая. Одно дело загрузка файла с пару сотен строк кода, а другое если их пару десятков миллионов.

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

2) Для текущего кода (обоих) это учитывается: в первом создается строка с двойной кавычкой и только. Во втором строка парсится PHP функцией str_getcsv() которая обе кавычки понимает.

3) В каком месте там unset по твоему поможет хорошо избавится от потерь памяти? Если у тебя файл выходит за пределы памяти, что редкость с текущими параметрами серверов, то это пожалуй экстра случай и подход уже нужен будет принципиально другой. Файл читать или записывать нужно будет частями или построчно, а не так целиком. По аналогии ты в ВП запихай 50 000 рубрик и все приехали, нужно будет костыли вставлять для нормальной работы. Но ВП почему-то самая популярная CMS, как же так? Я не писал код на все случаи жизни, код покрывает 80% случаев, остальное уже требует отдельного подхода, а этот код можно взять за основу.

Этот код в реальных условиях у меня работает! Может там и есть баги, но я их не встречал.

П.С. просмотрел второй код, добавил unset() маловероятно что много толку от этого, но лишним не будет.

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Не «суй туда какой угодно разделитель», а все возможные разделители для csv файлов. Ты бы ещё менеджеру предложил указывать разделитель для файла, который он загружает php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

«с текущими параметрами серверов». Поверь, кривым кодом можно положить сервер даже с очень хорошими характеристиками. Я обычно беру за правило, если переменная больше не будет использоваться она должна умереть (или обнулиться). Когда поработаешь с хайлоудом, то начинаешь понимать цену памяти)

И вообще, если пишешь рабочую программу, нужно это делать хорошо, а не в стиле «мой первый скрипт»!

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Демогогия это, ты реальную проблему покажи, так я её не вижу. php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

П.С. я люблю стиль «мой первый скрипт». Этот сайт как раз в таком стиле написан, пока все устраивает php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

php чтение csv в массив. Смотреть фото php чтение csv в массив. Смотреть картинку php чтение csv в массив. Картинка про php чтение csv в массив. Фото php чтение csv в массив

Важным моментом, является кодировка файла. Для корректного отображения кириллицы следует использовать кодировку cp1251 (windows-1251).

Источник

Чтение и запись данных в CSV-файл средствами PHP

Обычно, если стоимость создания интернет магазина достаточно высока или имеет большое количество товаров, заказчики просят сделать импорт товаров из их прайс листов. PHP как известно, не умеет работать с Excel-файлами стандартными средствами. Конечно есть множество различных классов и библиотек, которые могут читать и записывать информацию в Excel, но с ними возникает достаточно много проблем и неудобств. Гораздо проще и удобнее работать с CSV-файлами. Предлагаю разобрать простой способ чтения и записи данных в CSV-файл средствами PHP.

Как Вы знаете, CSV — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом — обычно запятой (,).

Как это работает?

Пример записи данных

После окончания записи, не забываем закрывать дескриптор файла fclose().

Пример чтения данных

С помощью функции fopen() мы пытаемся открыть файл для чтения и, если он есть, построчно заполняем массив данными с помощью функции fgetcsv(). Функция fgetcsv() читает строку из файла и производит разбор данных CSV. Данная функция похожа на функцию fgets(), с той разницей, что она производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива. В эту функцию мы передаем такие параметры как корректный файловый указатель на успешно открытый файл, длину строки (обычно указывается длина большая самой длинной строки в файле, в нашем случае мы указываем 0, т.е. длина не ограничена), а также разделитель поля (т.к. в примере для записи мы использовали точку с запятой, то и для чтения будем использовать её).

И опять же, после выполнения чтения из файла не забываем закрывать дескриптор файла fclose().

Список возможных режимов для fopen()

‘r’ — Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ — Окрывает файл для чтения и записи; помещяет указатель в начало файла.
‘w’ — Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
‘w+’ — Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
‘a’ — Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пробует его создать.
‘a+’ — Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пробует его создать.
‘x’ — Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, пытается его создать.
‘x+’ — Создаёт и открывает для чтения и записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, пытается его создать.

Как видите, мы разобрали лишь теорию, но если вынести чтение из файла и запись в файл отдельными функциями, правильно организовать обработку ошибок, то можно реализовать неплохой функционал по импорту/экспорту товаров в свой интернет магазин с возможностью добавления новых товаров и обновления имеющихся. Самое главное, не забывайте про кодировку импортируемых/экспортируемых данных, а также правильно выбирайте разделитель поля, т.к. бывают ситуации, когда выбранный разделитель может встретиться просто в тексте, который Вы пытаетесь сохранить в CSV-файл, в результате чего все данные в такой строке могут отображаться некорректно.

Источник

Чтение CSV-файла в PHP

В этой статье я покажу простой пример того, как прочитать данные их CSV-файла, и записать их в массив для дальнейшей работы с данными. Мы напишем простой код по парсингу CSV на PHP, которую можно будет использовать конвертации CSV-данных в массив, или JSON.

Итогово, CSV-формат состоит из переносов на новую строку и запятых, и это всё, что вам нужно знать.

Формата записи CSV можно увидеть на примере:

Зная своего врага в лицо Понимая, что это обычная строка, мы уже можем распарсить CSV, используя PHP функции для работы со строкой. Забегая наперёд, скажу, что в PHP есть встроенные средства по парсингу CSV (её мы рассмотрим дальше, сравнивая 2 разных подхода).

Потому, для полного понимания, как происходит чтение CSV файла построчно, напишем код, без использования встроенных решений парсинга CSV на PHP:

И теперь, на просмотерв этот код, вы знаете, как читать CSV файлы на PHP, используя обычные функции работы со строкой.

Парсинг CSV на примере встроенной функции fgetcsv

В PHP есть встроенная функция fgetcsv, которая облегчает работу по парсингу CSV-файлов. Эта функция избавляет нас от лишней работы, от «низкоуровневого» парсинга строки. Эта функция автоматически распарсит CSV поля и строки, сохраняя данные в массив.

Перепишем код, написанный ранее, используя функцию fgetcsv:

Так же, можете заметить, что функция fgetcsv облегчила нам работу, выполняя всю чёрную работу по парсингу самостоятельно (в отличии от варианта, который рассматривался вначале).

Преобразование CSV в массив

Теперь, понимая, как парсить CSV, покажу код преобразования CSV в ассоциативный массив. Используем предыдущий код, немного его дополним:

На этом примере, я показал, как конвертировать csv в массив, а так же, как конвертировать CSV в JSON.

Резюме

В этой статье я подробно рассказал, как можно работать с CSV в PHP, какими способами парсить, и как отображать данные, полученные из CSV. Писал максимально подробно и вариативно, надеюсь, вопросов не осталось ^^.

Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql

Get the latest posts delivered right to your inbox

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *