Ответ 1
Поскольку вы используете разделенные запятыми значения, вы можете использовать str_getcsv
.
str_getcsv($line, ",", "'");
Вернется:
Array
(
[0] => TRUE
[1] => 59
[2] => A large number is 10,000
)
Мне нужно взорвать мой ввод строки в массив в запятых. Однако строка содержит запятые внутри кавычек.
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'
Как я могу это сделать, с взрывом, игнорирующим запятые внутри кавычек?
Поскольку вы используете разделенные запятыми значения, вы можете использовать str_getcsv
.
str_getcsv($line, ",", "'");
Вернется:
Array
(
[0] => TRUE
[1] => 59
[2] => A large number is 10,000
)
Кажется, вы не хотите разделить вашу строку запятыми, а на последовательность цитаты + запятая + 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
- поскольку они являются разделителями и не соответствуют шаблону расщепления.
Вы можете взорвать запятую, за которой сразу следует одна цитата с 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'
)