Как получить текст в массиве между всеми тегами <span> из HTML?

Я хочу получить текст в массиве между всеми тегами <span> </span> из HTML, я попытался с этим кодом, но он возвращает только одно вхождение:

preg_match('/<span>(.+?)<\/span>/is', $row['tbl_highlighted_icon_content'], $matches);

echo $matches[1]; 

Мой HTML:

<span>The wish to</span> be unfairly treated is a compromise attempt that would COMBINE attack <span>and innocen</span>ce.  Who can combine the wholly incompatible, and make a unity  of what can NEVER j<span>oin? Walk </span>you the gentle way,

Мой код возвращает только одно вхождение тега span, но я хочу получить весь текст из каждого тега span в HTML в форме php-массива.

Ответ 1

вам нужно переключиться на preg_match_all function

код

$row['tbl_highlighted_icon_content'] = '<span>The wish to</span> be unfairly treated is a compromise attempt that would COMBINE attack <span>and innocen</span>ce. Who can combine the wholly incompatible, and make a unity of what can NEVER j<span>oin? Walk </span>you the gentle way,';    

preg_match_all('/<span>.*?<\/span>/is', $row['tbl_highlighted_icon_content'], $matches);

var_dump($matches);

как вы теперь видите, array правильно заполнен, поэтому вы можете echo выполнить все ваши совпадения

Ответ 3

вот код для получения всего значения span в массиве

      $str = "<span>The wish to</span> be unfairly treated is a compromise
attempt that would COMBINE attack <span>and innocen</span>ce. 
Who can combine the wholly incompatible, and make a unity 
of what can NEVER j<span>oin? Walk </span>you the gentle way,";

preg_match_all("/<span>(.+?)<\/span>/is", $str, $matches);


echo "<pre>";
print_r($matches);

вывод будет

Array
(
    [0] => Array
        (
            [0] => The wish to
            [1] => and innocen
            [2] => oin? Walk 
        )

    [1] => Array
        (
            [0] => The wish to
            [1] => and innocen
            [2] => oin? Walk 
        )

)

вы можете использовать o или 1 индекс

Ответ 4

Если вы не против использования стороннего компонента, я хотел бы показать вам компонент Symfony DomCrawler. Это очень простой способ проанализировать файлы HTML/XHTML/XML и перемещаться по узлам.

Вы даже можете использовать CSS Selectors. Ваш код будет примерно таким:

$crawler = new Crawler($html);
$spans = $crawler->filter("span");
echo $spans[1]->getText();;

Вам даже не нужно иметь полный HTML/XML-документ, если вы назначаете только часть <span>...</span> вашего кода, он будет работать нормально.