Str getcsv: примеры (PHP)
str_getcsv(string string [, string separator [, string enclosure [, string escape]]]): arrayОписание функции str_getcsv
Функция str_getcsv() в PHP разбирает строку в формате CSV и возвращает массив, содержащий поля, считанные из строки. Она часто применяется для обработки данных, полученных из CSV-файлов или текстовых источников, когда нужно разобрать строку без чтения из файла.
- string $string (обязательный): Входная строка для разбора в CSV-формате.
- string $separator = ',': Разделитель полей (один символ). По умолчанию запятая.
- string $enclosure = '"': Символ ограничителя полей (один символ). По умолчанию двойная кавычка.
- string $escape = '\\': Экранирующий символ (один символ). По умолчанию обратный слеш (\\). В PHP 8.0.0 по умолчанию используется символ \\" (если не указан).
- string $eol = NULL (добавлен в PHP 8.1.0): Символ конца строки. Если задан, функция будет использовать его для разделения строк, а не разбирать всю строку как одну запись. По умолчанию NULL.
Короткие примеры использования
$csvString = "яблоко,апельсин,банан";
$result = str_getcsv($csvString);
print_r($result);Array
(
[0] => яблоко
[1] => апельсин
[2] => банан
)$csvString = "яблоко;апельсин;банан";
$result = str_getcsv($csvString, ';');
print_r($result);Array
(
[0] => яблоко
[1] => апельсин
[2] => банан
)$csvString = '"Красное яблоко", "Желтый банан"';
$result = str_getcsv($csvString);
print_r($result);Array
(
[0] => Красное яблоко
[1] => Желтый банан
)$csvString = "яблоко,1\nапельсин,2";
$result = str_getcsv($csvString, separator: ',', eol: "\n");
print_r($result);Array
(
[0] => Array
(
[0] => яблоко
[1] => 1
)
[1] => Array
(
[0] => апельсин
[1] => 2
)
)Похожие функции в PHP
fgetcsv() — считывает строку из файлового указателя и разбирает её как CSV. Используется при работе с файлами.
SplFileObject::fgetcsv() — метод объекта SplFileObject для чтения CSV. Предоставляет объектно-ориентированный интерфейс.
csv_parse() (из расширения libcsv) — альтернативная функция для разбора CSV, но не входит в стандартную поставку PHP.
Когда использовать str_getcsv: Когда CSV-данные уже находятся в строковой переменной, а не в файле. Это удобно для обработки данных из сетевых запросов или баз данных.
Типичные ошибки
$csvString = '"яблоко,сорт1",банан';
$result = str_getcsv($csvString);
print_r($result); // ПравильноArray
(
[0] => яблоко,сорт1
[1] => банан
)Ошибкой было бы использовать простой split(',') для такой строки.
$csvString = "яблоко;апельсин";
$result = str_getcsv($csvString); // Используется разделитель по умолчанию ','
print_r($result);Array
(
[0] => яблоко;апельсин
)Массив содержит один элемент, так как запятая в строке отсутствует.
// В PHP 7
$csvString = '"яблоко\"сладкое",банан';
$result = str_getcsv($csvString, ',', '"', '\\');
print_r($result);В PHP 8.0+ экранирование по умолчанию изменилось, что может привести к разным результатам.
Изменения в последних версиях PHP
- PHP 8.0.0: Аргумент $escape теперь по умолчанию имеет значение '\"' (символ экранирования как часть enclosure), а не '\\'. Это изменение соответствует стандарту RFC 4180.
- PHP 8.1.0: Добавлен необязательный параметр $eol. Он позволяет разбивать строку на несколько записей CSV по указанному символу конца строки, возвращая массив массивов.
- PHP 8.2.0: Изменений, специфичных для str_getcsv, не было.
Расширенные примеры использования
$csvData = "\"Название\",\"Цена\"\n\"Яблоко\",100\n\"Апельсин\",200";
$lines = str_getcsv($csvData, ',', '"', '\"', "\n");
foreach ($lines as $line) {
print_r($line);
}Array
(
[0] => Название
[1] => Цена
)
Array
(
[0] => Яблоко
[1] => 100
)
Array
(
[0] => Апельсин
[1] => 200
)// PHP 8.0+ с escape по умолчанию '\"'
$csvString = '"яблоко\"сорт1",банан';
$result = str_getcsv($csvString);
print_r($result);Array
(
[0] => яблоко"сорт1
[1] => банан
)$csvString = "яблоко\t10\tкрасное";
$result = str_getcsv($csvString, "\t");
print_r($result);Array
(
[0] => яблоко
[1] => 10
[2] => красное
)$csvString = "яблоко,,банан,"Яблоко, Голден",";
$result = str_getcsv($csvString);
print_r($result);Array
(
[0] => яблоко
[1] =>
[2] => банан
[3] =>
[4] => Яблоко, Голден
[5] =>
)Аналоги функции в других языках
Str getcsv в Python
import csv
csv_string = 'яблоко,апельсин,банан'
reader = csv.reader(csv_string.splitlines())
for row in reader:
print(row)['яблоко', 'апельсин', 'банан']
В Python обычно используется модуль csv, который более гибкий и требует итерации по reader. Для простой строки можно использовать split(','), но это не учитывает кавычки.
Str getcsv в Javascript
let csvString = 'яблоко,апельсин,банан';
let result = csvString.split(',');
console.log(result);['яблоко', 'апельсин', 'банан']
В JavaScript нет встроенной функции для разбора CSV, но можно использовать split. Для сложных случаев применяют библиотеки или ручной разбор.
Str getcsv в MySQL
-- Использование LOAD DATA INFILE для импорта CSV-файла
LOAD DATA INFILE 'data.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';MySQL работает с CSV-файлами через команду LOAD DATA INFILE или импорт. Прямого аналога str_getcsv нет, так как язык ориентирован на работу с БД.