Подтвердить что ты не робот

Как разбирать csv в PHP с многострочными данными в столбце

Рассмотрим файл 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, который имеет многострочные значения?

4b9b3361

Ответ 1

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

Ответ 2

Вот несколько рабочих примеров, как это сделать. Я использую 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);
}

Ответ 3

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

$fp = fopen('php://temp','r+');
fwrite($fp, $CsvString);
rewind($fp); //rewind to process CSV
while (($row = fgetcsv($fp, 0)) !== FALSE) {
    print_r($row);
}