Получить второй абзац из строковой функции

У меня есть такая строка:

<p>Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt. Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt.</p>

<p><br />Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Nullam id dolor id nibh ultricies vehicula ut id elit.lor sit amet, consectetur adipiscing elit. Duis mollis, est non com.</p>

Я знаю, как я могу получить первый абзац так:

function getFirstParagraph($string){
$string = substr($string,0, strpos($string, "</p>")+4);
return $string;
}

Но я понятия не имею, как я могу получить второй абзац, кто-нибудь может мне помочь с этим?

1

Решение

Я бы использовал регулярные выражения.

function getParagraph($number, $string)
{
$index = $number-1;

$matches = [];

if(!preg_match_all('#<p>(.*?)<\/p>#', $string, $matches))
throw new Exception('No paragraphs found');

$matches = $matches[1];
if(!array_key_exists($index, $matches))
throw new Exception("Only ".count($matches)." were found, you requested number {$number}");

return $matches[$index];
}

function getFirstParagraph($string) //Legacy
{
return getParagraph(1, $string);
}
3

Другие решения

Вы могли бы попробовать

$string = "<p>Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt. Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt.</p><p><br />Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Nullam id dolor id nibh ultricies vehicula ut id elit.lor sit amet, consectetur adipiscing elit. Duis mollis, est non com.</p>";

preg_match_all("/\<p\>(.*?)\<\/p\>/", $string, $arrParagraphs);
$paragraphs=$arrParagraphs[0];

echo $paragraphs[0]."<br />\n";
echo $paragraphs[1]."<br />\n";
1

Просто используйте preg_match_all используйте код ниже

<?php
function getTextBetweenTags($string, $tagname)
{
$pattern = "/<$tagname>(.*?)<\/$tagname>/";
preg_match_all($pattern, $string, $matches);
return $matches[1];
}
$array= getTextBetweenTags("
<p>Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt. Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt.</p>

<p><br />Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Nullam id dolor id nibh ultricies vehicula ut id elit.lor sit amet, consectetur adipiscing elit. Duis mollis, est non com.</p>
", "p");
echo $array[1];// will print 2nd para , for first para change $match[2] to $match [1]
?>

Надеюсь, это поможет вам

0

Вот простой способ:

$test ="<p>Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt. Maecenas laoreet est bibendum, dictum mi vel, cursus mi. Curabitur feugiat libero vitae lorem venenatis consequat. Donec luctus nisi cursus miet sapien blandit, quis congue massa tincidunt.</p>

<p><br />Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Nullam id dolor id nibh ultricies vehicula ut id elit.lor sit amet, consectetur adipiscing elit. Duis mollis, est non com.</p>";

explode('</p>', $test);

print_r($test);
0
По вопросам рекламы [email protected]