2010-05-18 49 views
19

Có cách nào để phát nổ() bằng cách sử dụng một mảng các dấu phân cách không?Exploding by Array of Delimiters

PHP Manual:

mảng nổ (string $ delimiter, chuỗi $ string [, int $ hạn])

Thay vì sử dụng string $delimiter là có cách nào để sử dụng array $delimiter mà không ảnh hưởng hiệu suất quá nhiều?

Trả lời

25

Sử dụng preg_split() với regex phù hợp.

+6

Ví dụ: 'print_r (preg_split ("/[.]/"," 0 1,2.3 "));' sẽ cung cấp cho bạn 'Mảng ([0] => 0 [1] => 1 [2 ] => 2 [3] => 3) '. – sirhc

+2

'print_r (preg_split ("/[, \.]/"," 0 1,2.3 "));' ý của bạn là :) Cảm ơn mặc dù, có lẽ là cách tốt nhất tôi đoán. – JoeC

-1

Phương thức phát của php không hỗ trợ nhiều dấu phân cách, do đó bạn không thể chuyển mảng đó thành mảng. Ngoài ra, loại chuỗi nào bạn đang phân tích cú pháp có nhiều dấu phân tách? bạn đặt cược tốt nhất là lặp qua các dấu phân cách của bạn và phát lại một số chuỗi đã phát nổ.

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

đây là một mẹo hay để tránh sử dụng cụm từ thông dụng. –

+0

Điều đó phải nhanh hơn regex, tốt nhất. – Pioul

+0

thats giải pháp tuyệt vời, briliant và đơn giản, kudo! –

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

Đó là cải thiện @ đang 65Fbef05 của. Chúng tôi sử dụng dấu phân cách đầu tiên, bởi vì "+delim+" có thể được sử dụng trong chuỗi gốc.