2010-05-18 4 views
19

Existe-t-il un moyen d'exploser() en utilisant un tableau de délimiteurs?Explosion par un tableau de délimiteurs

PHP Manual:

tableau exploser (string delimiter $, string $ string [, int $ limit])

Au lieu d'utiliser string $delimiter est-il possible d'utiliser array $delimiter sans affecter les performances trop?

Répondre

25

Utilisez preg_split() avec une regex appropriée.

+6

Par exemple: 'print_r (preg_split ("/[,.]/"," 0 1,2.3 "));' vous donnera 'Array ([0] => 0 [1] => 1 [2 ] => 2 [3] => 3) '. – sirhc

+2

'print_r (preg_split ("/[, \.]/"," 0 1,2,3 "));' vous voulez dire :) Merci, probablement le meilleur moyen que je suppose. – JoeC

-1

La méthode d'éclatement de php ne supporte pas plusieurs délimiteurs, donc vous ne pouvez pas lui passer un tableau. En outre, quel type de chaîne utilisez-vous avec plusieurs délimiteurs? vous feriez mieux de faire défiler vos délimiteurs et de ré-exploser certaines des cordes explosées.

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

c'est une super astuce pour éviter d'utiliser des expressions régulières. –

+0

Cela devrait être plus rapide que les expressions régulières, gentil. – Pioul

+0

thats incroyable, solution briliant et simple, bravo! –

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

C'est amélioré @ code de 65Fbef05. Nous utilisons le premier délimiteur, car "+delim+" peut être utilisé dans la chaîne d'origine.

Questions connexes