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

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

Input:

$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'

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

Ответы

Ответ 1

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

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

Вернется:

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

Ответ 2

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

Если это так, здесь может помочь функция 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 - поскольку они являются разделителями и не соответствуют шаблону расщепления.

Ответ 3

Вы можете взорвать запятую, за которой сразу следует одна цитата с 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'
)