2012-05-14 2 views
6

Czy możemy zrobić wiele eksplodować() w PHP?Czy możemy wykonać wiele eksplodowań w jednym wierszu w PHP?

Na przykład, aby to zrobić:

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

Wszystko w jednym eksplodować tak:

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

Jaki jest najlepszy sposób to zrobić? To, czego chcę, to podzielić łańcuch na wiele ograniczników w jednej linii.

Odpowiedz

15

Jeśli szukasz podzielić ciąg z wieloma ogranicznikami, może preg_split byłoby właściwe.

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

co skutkuje:

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

hi dzięki za kod, ale mam \ r \ n \ wartość i przestrzeni, aby eksplodować swój foreach nie działa (preg_split ('/ (\ r \ n \ s | & |,)/', $ sms [' sms_text ']) jako $ no) – Harinder

+0

dziękuję bro rozwiązany foreach (preg_split ("/ \ r \ n | (\ s | & |,) /", $ sms ["sms_text"]) jako $ no) – Harinder

2

można użyć tej

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

pójdę z strtok() np

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

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

Oto doskonałe rozwiązanie znalazłem na 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] =>) 
//) 

?>