2012-05-14 6 views
6

¿Podemos hacer múltiples explotaciones() en PHP?¿Podemos hacer múltiples declaraciones de explosión en una línea en PHP?

Por ejemplo, para hacer esto:

foreach(explode(" ",$sms['sms_text']) as $no) 
foreach(explode("&",$sms['sms_text']) as $no) 
foreach(explode(",",$sms['sms_text']) as $no) 

Todo en uno explotar como esto:

foreach(explode('','&',',',$sms['sms_text']) as $no) 

Cuál es la mejor manera de hacer esto? Lo que quiero es dividir la cadena en múltiples delimitadores en una línea.

Respuesta

15

Si lo que busca es dividir la cadena con múltiples delimitadores, quizás preg_split sería apropiado.

$parts = preg_split('/(\s|&|,)/', 'This and&this and,this'); 
print_r($parts); 

que se traduce en:

Array ( 
    [0] => This 
    [1] => and 
    [2] => this 
    [3] => and 
    [4] => this 
) 
+0

hola gracias por el código, pero no tengo \ r \ n \ valor y el espacio para llegar a explotar su foreach que no trabaja (preg_split ('/ (\ r \ n \ s | & |,)/', $ sms [' sms_text ']) as $ no) – Harinder

+0

gracias bro brocheado foreach (preg_split ("/ \ r \ n | (\ s | & |,) /", $ sms ['sms_text']) como $ no) – Harinder

2

puede utilizar esta

function multipleExplode($delimiters = array(), $string = ''){ 

    $mainDelim=$delimiters[count($delimiters)-1]; // dernier 

    array_pop($delimiters); 

    foreach($delimiters as $delimiter){ 

     $string= str_replace($delimiter, $mainDelim, $string); 

    } 

    $result= explode($mainDelim, $string); 
    return $result; 

} 
0

Usted podría utilizar preg_split() function a stplit una cadena mediante una expresión regular, así:

$text = preg_split('/(|,|&)/', $text); 
0

me gustaría ir con strtok(), por ejemplo

$delimiter = ' &,'; 
$token = strtok($sms['sms_text'], $delimiter); 

while ($token !== false) { 
    echo $token . "\n"; 
    $token = strtok($delimiter); 
} 
4

He aquí una gran solución que encontré en PHP.net:

<?php 

//$delimiters must be an array. 

function multiexplode ($delimiters,$string) { 

    $ready = str_replace($delimiters, $delimiters[0], $string); 
    $launch = explode($delimiters[0], $ready); 
    return $launch; 
} 

$text = "here is a sample: this text, and this will be exploded. this also | this one too :)"; 
$exploded = multiexplode(array(",",".","|",":"),$text); 

print_r($exploded); 

//And output will be like this: 
// Array 
// (
// [0] => here is a sample 
// [1] => this text 
// [2] => and this will be exploded 
// [3] => this also 
// [4] => this one too 
// [5] =>) 
//) 

?> 
Cuestiones relacionadas