PHP: Как я могу взорвать строку запятыми, но не запятые в кавычках?

Мне нужно взорвать мой ввод строки в массив в запятых. Однако строка содержит запятые внутри кавычек.

Входные данные:

$line = 'TRUE','59','A large number is 10,000'; $linearray = explode(",",$line); $linemysql = implode("','",$linearray); 

Возвращает $ linemysql as:

 'TRUE','59','A large number is 10','000' 

Как я могу это сделать, с взрывом, игнорирующим запятые внутри кавычек?

Поскольку вы используете str_getcsv запятыми значения, вы можете использовать str_getcsv .

 str_getcsv($line, ",", "'"); 

Вернется:

 Array ( [0] => TRUE [1] => 59 [2] => A large number is 10,000 ) 

Кажется, вы не хотите разделить свою строку запятыми, а на последовательность цитат + запятая + цитата?

Если это так, здесь может помочь preg_split .

Например, используя эту часть кода:

 $line = "'TRUE','59','A large number is 10,000'"; $parts = preg_split("/','/", $line); var_dump($parts); 

Я получаю следующий вывод:

 array 0 => string ''TRUE' (length=5) 1 => string '59' (length=2) 2 => string 'A large number is 10,000'' (length=25) 

Начиная с этого, теперь нужно удалить первые и последние кавычки $line , прежде чем вызывать preg_split – поскольку они являются разделителями и не соответствуют шаблону расщепления.

Вы можете взорваться запятыми, за которыми сразу следует одна цитата с preg_split() используя положительный результат. Это сохранит ваши одиночные кавычки в выходном массиве.

Код: ( Демо )

 $line = "'TRUE','59','A large number is 10,000'"; var_export(preg_split("/,(?=')/",$line)); 

Вывод:

 array ( 0 => '\'TRUE\'', 1 => '\'59\'', 2 => '\'A large number is 10,000\'', ) 

* fyi, косые черты в массиве результатов – это всего лишь результат экранирования, выполняемого var_export() .

print_r() показывает это (потому что он не передает одиночные кавычки свои значения):

 Array ( [0] => 'TRUE' [1] => '59' [2] => 'A large number is 10,000' )