Мне нужно взорвать мой ввод строки в массив в запятых. Однако строка содержит запятые внутри кавычек.
Входные данные:
$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' )