2010-05-18 22 views
19

¿Hay alguna forma de explotar() usando una matriz de delimitadores?Exploding by Array of Delimiters

Manual de PHP:

gama explotar (string $ delimitador, string $ cadena [, int $ limite])

En lugar de utilizar string $delimiter ¿hay alguna manera de utilizar array $delimiter sin afectar el rendimiento ¿demasiado?

Respuesta

25

Utilice preg_split() con un regex apropiado.

+6

Por ejemplo: 'print_r (preg_split ("/[,.]/"," 0 1,2.3 "));' le dará 'Array ([0] => 0 [1] => 1 [2 ] => 2 [3] => 3) '. – sirhc

+2

'print_r (preg_split ("/[, \.]/"," 0 1,2.3 "));' quieres decir :) Gracias, probablemente la mejor manera, supongo. – JoeC

-1

El método de explosión de php no admite múltiples delimitadores, por lo que no puede pasarlo a una matriz. Además, ¿qué tipo de cadena está analizando que tiene múltiples delimitadores? lo mejor que puedes hacer es recorrer tus delimitadores y volver a explotar algunas de las cadenas explotadas.

51
$str = 'Monsters are SUPER scary, bro!'; 
$del = array('a', 'b', 'c'); 

// In one fell swoop... 
$arr = explode($del[0], str_replace($del, $del[0], $str)); 
+1

este es un gran truco para evitar el uso de expresiones regulares. –

+0

Eso debería ser más rápido que las expresiones regulares, bueno. – Pioul

+0

¡es una solución increíble, brillante y simple, felicitaciones! –

6
function explode_by_array($delim, $input) { 
    $unidelim = $delim[0]; 
    $step_01 = str_replace($delim, $unidelim, $input); //Extra step to create a uniform value 
    return explode($unidelim, $step_01); 
} 

Eso ha mejorado @ código de 65Fbef05. Usamos el primer delimitador, porque "+delim+" se puede usar en la cadena original.