fgetcsv

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Описание

fgetcsv(
    resource$stream,
    ?int$length = null,
    string$separator = ",",
    string$enclosure = "\"",
    string$escape = "\\"
): array|false

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

Замечание:

Функция учитывает настройки локали. Если значение константы LC_CTYPE равно, например, en_US.UTF-8, функция может неправильно прочитать файлы в однобайтовой кодировке.

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

stream

Корректный файловый указатель на файл, успешно открытый функциями fopen(), popen() или fsockopen().

length

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

Отсутствие этого параметра (или установка его в 0 или null, начиная с PHP 8.0.0) приведёт к тому, что длина строки будет не ограничена. Это может сказаться на скорости выполнения.

separator

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

enclosure

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

escape

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

Замечание: Обычно символ enclosure экранируется внутри поля путём его удваивания; однако, символ escape в качестве альтернативы. Поэтому значения по умолчанию этих параметров "" и \" имеют одинаковое значение. Помимо разрешения экранировать символ enclosure символ escape не имеет особого смысла; он даже не предназначен для самого экранирования.

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

Функция возвращает индексированный массив с прочтёнными полями в случае успешного выполнения или false, если возникла ошибка.

Замечание:

Функция возвращает пустую строку CSV-файла как массив, который содержит единственный элемент null, ошибки в этом случае не возникнет.

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

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

ВерсияОписание
8.0.0 Параметр length теперь принимает значение null.
7.4.0 Теперь параметр escape умеет принимать пустую строку для отключения проприетарного механизма экранирования.

Примеры

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

<?php

$row
= 1;

if ((
$handle = fopen("test.csv", "r")) !== FALSE) {
while ((
$data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo
"<p> $num полей в строке $row: <br /></p>\n";
$row++;

for (
$c=0; $c < $num; $c++) {
echo
$data[$c] . "<br />\n";
}
}

fclose($handle);
}

?>

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

  • str_getcsv() - Разбирает CSV-строку в массив
  • explode() - Разбивает строку разделителем
  • file() - Читает содержимое файла и помещает его в массив
  • pack() - Упаковывает данные в двоичную строку
  • fputcsv() - Форматирует строку в виде CSV и записывает её в файловый указатель
To Top