Ответ 1
fgetcsv
должен иметь возможность правильно разобрать это.
В любом случае, я бы не рекомендовал это делать вручную. В разборе CSV есть много таких ошибок.
Рассмотрим файл 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);
}