nielsv
nielsv

Reputation: 6820

Get second paragraph from a string function

I have a string like this:

<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>

I know how I can get the first paragraph like this:

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

But I have no clue how I can get the second paragraph, can anybody help me with this?

Upvotes: 1

Views: 1299

Answers (4)

rdiz
rdiz

Reputation: 6176

I would use regex.

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

Upvotes: 3

user2304118
user2304118

Reputation:

You could try

$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";

Upvotes: 1

The Humble Rat
The Humble Rat

Reputation: 4696

Here is just a simple method:

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

Upvotes: 0

Utkarsh Dixit
Utkarsh Dixit

Reputation: 4275

Just use preg_match_all use the code below

<?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]
?>

Hope this helps you

Upvotes: 0

Related Questions