Если ваш CSV-файл верен (каждое поле либо начинается и заканчивается «или не содержит»), вы можете проанализировать строку с помощью рекурсивной функции, например:
$csvString = 'zero,"o,ne",two,"thr,ee"';
function parseCsv($string, &$result)
{
$regex = '/^((".*")|([^"].*))(,(.*))?$/U';
$matches = array();
preg_match($regex, $string, $matches);
$result[] = $matches[1];
if(isset($matches[5]))
{
parseCsv($matches[5], $result);
}
}
$result = array();
parseCsv($csvString, $result);
var_dump($result);
Примечаниечто это не было проверено со строками в кавычках, которые содержат (экранированные) кавычки. Кроме того, он хранит кавычки вокруг строк в кавычках.
Результат вышеупомянутой функции:
array
0 => string 'zero' (length=4)
1 => string '"o,ne"' (length=6)
2 => string 'two' (length=3)
3 => string '"thr,ee"' (length=8)