Рассмотрим 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, который имеет многострочные значения?
fgetcsv
должен иметь возможность правильно проанализировать это.
В любом случае, я бы не рекомендовал это делать вручную. В разборе CSV есть много таких ошибок.
Вот несколько рабочих примеров, как это сделать. Я использую 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); }
На основе ответа StanleyD , но с использованием блока временной памяти (а не записи на диск) для повышения производительности:
$fp = fopen('php://temp','r+'); fwrite($fp, $CsvString); rewind($fp); //rewind to process CSV while (($row = fgetcsv($fp, 0)) !== FALSE) { print_r($row); }