Как разобрать CSV в PHP с многострочными данными в столбце - PullRequest
14 голосов
/ 19 января 2011

Рассмотрим s CSV-файл как этот

item1,"description 1"
item2,"description 2"
item3,"description 3
description 3 continues on new line"
item4,"description 4"

который должен быть разобран как этот

item1,"description 1"
item2,"description 2"
item3,"description 3 description 3 continues on new line"
item4,"description 4"

Есть ли способ проанализировать этот CSV в PHP, который имеет многострочные значения?

Ответы [ 3 ]

10 голосов
/ 08 сентября 2013

Вот несколько рабочих примеров, как это сделать.Я использую fgetcsv:

CSV в строковой переменной $ CsvString:

$fp = tmpfile();
fwrite($fp, $CsvString);
rewind($fp); //rewind to process CSV
while (($row = fgetcsv($fp, 0)) !== FALSE) {
    print_r($row);
}

CSV в файле:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
  while (($row = fgetcsv($handle, 0, ",")) !== FALSE) {
    print_r($row);
  }
  fclose($handle);
}
8 голосов
/ 24 сентября 2015

На основе StanleyD ответа, но с использованием блока временной памяти (а не записи на диск) для повышения производительности:

$fp = fopen('php://temp','r+');
fwrite($fp, $CsvString);
rewind($fp); //rewind to process CSV
while (($row = fgetcsv($fp, 0)) !== FALSE) {
    print_r($row);
}
8 голосов
/ 19 января 2011

fgetcsv должен быть в состоянии правильно разобрать это.
В любом случае, я бы не советовал делать это вручную, есть много таких ошибок при разборе CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...