Nicekiwi
Nicekiwi

Reputation: 4807

PHP: How can I explode a string by commas, but not wheres the commas are within quotes?

I need to explode my string input into an array at the commas. However the string contains commas inside quotes.

Input:

$line = 'TRUE','59','A large number is 10,000';

$linearray = explode(",",$line);
$linemysql = implode("','",$linearray);

Returns $linemysql as:

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

How can I go about accomplishing this, with the explode ignoring the commas inside the quote marks?

Upvotes: 25

Views: 23269

Answers (2)

Russell Dias
Russell Dias

Reputation: 73342

Since you are using comma seperated values, you can use str_getcsv.

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

Will return:

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

Upvotes: 70

Pascal MARTIN
Pascal MARTIN

Reputation: 401142

It seems you do not want to split your string by commas, but by the succession of quote+comma+quote ?

If so, the preg_split function might help, here.


For example, using this portion of code :

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

I get the following output :

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

Starting with that, it's now a matter of removing the first and last quotes of the $line string, before calling preg_split -- as those are delimiters, and don't match the splitting pattern.

Upvotes: 6

Related Questions