如何显示前两个段落?然后是剩下的段落? - PHP

时间:2013-04-21 18:54:04

标签: php

我在一个字符串中有4段文字。每个段落都被<p></p>包围。

  1. 我的第一个目标是输出前两段。
  2. 我的第二个目标是输出页面上其他位置的剩余段落。我有时可以处理包含4个以上段落的字符串。
  3. 我在网上搜索过那里已有的东西。只显示第一段,但我没有找到关于显示第1-2段然后显示其余段落的内容。任何人都可以帮忙吗?

    不确定使用哪个,substr,strpos等.....?

    编辑 - 感谢您的回答,澄清一下,段落目前不包含HTML,但是我需要选择在每个段落中包含HTML。

2 个答案:

答案 0 :(得分:1)

使用DOMDocument

初始化:

$dom = new DOMDocument;
$dom->loadHTML($myString);
$p = $dom->getElementsByTagName('p');

如果每个可以包含其他HTML元素(或不包含),请创建一个函数:

function getInner(DOMElement $node) {
    $tmp = "";
    foreach($node->childNodes as $c) {
        $tmp .= $c->ownerDocument->saveXML($c);
    }
    return $tmp;
}

然后在需要这样的段落时使用该函数:

$p1 = getInner($p->item(0));

您可以阅读有关DOMDocument here

的更多信息

答案 1 :(得分:0)

使用正则表达式:

    $str = '<p style="color:red;"><b>asd</b>para<img src="afs"/>graph 1</p >
        <p>paragraph 2</p>
        <p>paragraph 3</p>
        <p>paragraph 4</p>
            ';


   // preg_match_all('/<p.*>([^\<]+)<\/p\s*>/i',$str,$matches);
    //for inside html like a comment sais:
    preg_match_all('/<p[^\>]*>(.*)<\/p\s*>/i',$str,$matches);

    print_r($matches);

打印:

Array
(
    [0] => Array
        (
            [0] => <p style="color:red;"><b>asd</b>para<img src="afs"/>graph 1</p >
            [1] => <p>paragraph 2</p>
            [2] => <p>paragraph 3</p>
            [3] => <p>paragraph 4</p>
        )

    [1] => Array
        (
            [0] => <b>asd</b>para<img src="afs"/>graph 1
            [1] => paragraph 2
            [2] => paragraph 3
            [3] => paragraph 4
        )

)