У меня есть переменная $ content, содержащая текст и изображения в этой форме (неизвестное количество изображений):
text text text text <img src="path/to/image/1">text text text text <img src="path/to/image/2"> text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text <img src="path/to/image/5">
Я хочу извлечь все изображения src и сохранить их в массиве с помощью php, например:
array( [1]="path/to/image/1" [2]="path/to/image/2" [3]="path/to/image/3" [4]="path/to/image/4" [5]="path/to/image/5" . . . )
что это лучший способ сделать что-то подобное. Я уже пробовал функцию взорваться, но этот способ казался неэффективным.
$dom = new domDocument; $dom->loadHTML($html); $dom->preserveWhiteSpace = false; $imgs = $dom->getElementsByTagName("img"); $links = array(); for($i = 0; $i < $imgs->length; $i++) { $links[] = $imgs->item($i)->getAttribute("src"); }
Вот пример использования simplehtmldom :
include("simple_html_dom.php"); $content = ' text text text text <img src="path/to/image/1">text text text text <img src="path/to/image/2"> text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text <img src="path/to/image/5"> '; $html = str_get_html($content); $images = $html->find("img"); $links = array(); foreach($images as $image) { $links[] = $image->src; } print_r($links);
вinclude("simple_html_dom.php"); $content = ' text text text text <img src="path/to/image/1">text text text text <img src="path/to/image/2"> text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text <img src="path/to/image/5"> '; $html = str_get_html($content); $images = $html->find("img"); $links = array(); foreach($images as $image) { $links[] = $image->src; } print_r($links);
Вывод:
Array ( [0] => path/to/image/1 [1] => path/to/image/2 [2] => path/to/image/3 [3] => path/to/image/4 [4] => path/to/image/5 )
Использование регулярного выражения:
<?php $str = ' text text text text <img src="path/to/image/1">text text text text <img src="path/to/image/2"> text text text text text text text text text text text text text text text text <img src="path/to/image/3"><img src="path/to/image/4">text text text text <img src="path/to/image/5">'; preg_match_all('@<img.*src="([^"]*)"[^>/]*/?>@Ui', $str, $out); print_r($out[1]); ?>
Вывод:
Array ( [0] => path/to/image/1 [1] => path/to/image/2 [2] => path/to/image/3 [3] => path/to/image/4 [4] => path/to/image/5 )