w3schools str_split recorrer parse array php string explode

str_split - PHP: ¿Cómo puedo explotar una cadena con comas, pero no cuando las comas están entre comillas?



str_split php (3)

Necesito explotar mi entrada de cadena en una matriz en las comas. Sin embargo, la cadena contiene comas dentro de las comillas.

Entrada:

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

Devuelve $ linemysql como:

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

¿Cómo puedo lograr esto, con la explosión haciendo caso omiso de las comas dentro de las comillas?


Parece que no quieres dividir tu cadena por comas, sino por la sucesión de comillas + comas + comillas?

Si es así, la función preg_split podría ayudar, aquí.


Por ejemplo, usando esta porción de código:

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

Me sale el siguiente resultado:

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

A partir de eso, ahora es cuestión de eliminar la primera y la última comillas de la cadena de la $line , antes de llamar a preg_split , ya que son delimitadores y no coinciden con el patrón de división.


Puede explotar en comas que son seguidas inmediatamente por una comilla simple con preg_split() usando lookahead positivo. Esto mantendrá sus comillas simples en la matriz de salida.

Código: ( Demo )

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

Salida:

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

* fyi, las barras diagonales en la matriz de resultados son solo el producto del escape realizado por var_export() .

print_r() muestra esto (porque no tiene una sola cita para ajustar sus valores):

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


Ya que está usando valores separados por comas, puede usar str_getcsv .

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

Volverá

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