2010-05-18 1 views
19

Есть ли способ взорвать() с помощью массива разделителей?Exploding by Array of Delimiters

PHP Manual:

массив взрывается (строка $ разделитель, строка $ строка [, Int $ предел])

Вместо использования string $delimiter есть ли способ использовать array $delimiter без ущерба для производительности слишком много?

ответ

25

Используйте preg_split() с соответствующим регулярным выражением.

+6

Например: 'print_r (preg_split ("/[,.]/"," 0 1,2,3 "));' даст вам 'Array ([0] => 0 [1] => 1 [2 ] => 2 [3] => 3) '. – sirhc

+2

'print_r (preg_split ("/[, \.]/"," 0 1,2,3 "));' вы имеете в виду :) Спасибо, хотя, наверное, лучший способ, я думаю. – JoeC

-1

Метод взрыва php не поддерживает множественные разделители, поэтому вы не можете передать ему массив. Кроме того, какая строка вы разбираете с несколькими разделителями? вам лучше всего зациклиться на ваших разделителях и повторно взорвать некоторые из взорванных строк.

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

Это отличный трюк, чтобы избежать использования регулярных выражений. –

+0

Это должно быть быстрее, чем регулярные выражения, хорошие. – Pioul

+0

Это потрясающее, просторное и простое решение, престиж! –

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

Это улучшилось @ код 65Fbef05 в. Мы используем первый разделитель, потому что "+delim+" может использоваться в исходной строке.