2015-06-10 14 views
6

tôi muốn chia chuỗi trên thẻ thành các phần khác nhau.Chia nhỏ hoặc phát chuỗi PHP trên <img> thẻ

$string = 'Text <img src="hello.png" /> other text.'; 

Hàm tiếp theo không hoạt động đúng cách.

$array = preg_split('/<img .*>/i', $string); 

Sản lượng nên

array(
    0 => 'Text ', 
    1 => '<img src="hello.png" />', 
    3 => ' other text.' 
) 

Những loại mẫu nên tôi sử dụng để làm cho nó làm gì?

EDIT Điều gì sẽ xảy ra nếu có nhiều thẻ?

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

Và sản lượng nên là:

array (
    0 => 'Text ', 
    1 => '<img src="hello.png" />', 
    3 => 'hello ', 
    4 => '<img src="bye.png" />', 
    5 => ' other text.' 
) 

Trả lời

2

Bạn đang ở con đường đúng đắn. Bạn phải đặt cờ PREG_SPLIT_DELIM_CAPTURE theo cách này:

$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

Với nhiều tag sửa đúng regex:

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img[^>]+\>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

Sản lượng này sẽ:

array(5) { 
    [0]=> 
    string(5) "Text " 
    [1]=> 
    string(22) "<img src="hello.png" >" 
    [2]=> 
    string(7) " hello " 
    [3]=> 
    string(21) "<img src="bye.png" />" 
    [4]=> 
    string(12) " other text." 
} 
+0

là lỗi thời này? Khi tôi cố gắng lặp lại mã này, tôi chỉ thấy: 'mảng' – twan

+0

@twan, bạn đã sử dụng nó như thế nào? – Federkun

+0

Tôi đã sửa nó, đã sử dụng echo thay vì print_r ($ array) lol. – twan

1

Bạn cần phải bao gồm phi nhân vật tham lam (?) như được mô tả here vào mẫu của bạn, để buộc nó lấy sự xuất hiện đầu tiên ví dụ. '/(<img .*?\/>)/i'

do đó, mã ví dụ của bạn sẽ được một cái gì đó như:

$string = 'Text <img src="hello.png" /> hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img .*?\/>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

var_dump($array); 

nào dẫn đến việc in ấn:

array(5) { 
    [0] => 
    string(5) "Text " 
    [1] => 
    string(23) "<img src="hello.png" />" 
    [2] => 
    string(7) " hello " 
    [3] => 
    string(21) "<img src="bye.png" />" 
    [4] => 
    string(12) " other text." 
}