2010-05-18 20 views
19

C'è un modo per esplodere() utilizzando una serie di delimitatori?Exploding by Array of Delimiters

Manuale PHP:

array di esplodere (string $ delimitatore, string $ string [, int $ limit])

Invece di usare string $delimiter c'è un modo per utilizzare array $delimiter senza influire sulle prestazioni troppo?

risposta

25

Utilizzare preg_split() con un'espressione regolare appropriata.

+6

Ad esempio: 'print_r (preg_split ("/[,.]/"," 0 1,2.3 "));' fornirà 'Array ([0] => 0 [1] => 1 [2 ] => 2 [3] => 3) '. – sirhc

+2

'print_r (preg_split ("/[, \.]/"," 0 1,2.3 "));" vuoi dire :) Grazie però, probabilmente il modo migliore che immagino. – JoeC

-1

Il metodo di esplosione di php non supporta più delimitatori, quindi non è possibile passare un array. Inoltre, quale tipo di stringa stai analizzando con delimitatori multipli? la cosa migliore da fare sarebbe quella di passare in rassegna i delimitatori e ri-esplodere alcune stringhe esplose.

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

questo è un grande trucco per evitare l'uso di espressioni regolari. –

+0

Dovrebbe essere più veloce delle regex, bella. – Pioul

+0

questa è una soluzione sorprendente, brillante e semplice, complimenti! –

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); 
} 

che è migliorato @ codice di 65Fbef05. Utilizziamo il primo delimitatore perché "+delim+" può essere utilizzato nella stringa originale.