【问题标题】:Echo last five divs回显最后五个 div
【发布时间】:2013-01-30 21:21:32
【问题描述】:

我将如何使用 php 来echo 最后 5 个 div?

例如这个字符串:

<div style='df">cool</div><div>cooletre</div><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div>

我该怎么做?使用 domparser、正则表达式还是什么?

可以修改它来完成这个吗?此处的代码获取前五个,但我想获取 最后一个五个。

$string = '<div class="div">1</div><div class="div">2</div><div class="div">3</div><div class="div">4</div><div class="div">5</div><div class="div">end!</div>';

$dom = new DOMDocument();
$new_dom = new DOMDocument;
$dom->loadHTML($string);

$count = 0;
foreach ($dom->getElementsByTagName('div') as $node)
{
    $new_dom->appendChild($new_dom->importNode($node, TRUE));
    if (++$count >= 5)
        break;
}

echo $new_dom->saveHTML();

【问题讨论】:

  • 你能把它们放在一个数组里吗?
  • PHP echo last 5 divs 的可能副本;不过标题更好。关于为什么复制和粘贴的代码没有明确用于extracting the first five elements 的归属,或者您认为它如何运作,或者您自己尝试过 以适应它的原因,仍然没有太多扩展。 SO 不适用于 plzsendtehcodez 问题。
  • 我不知道该适应什么。所以你说任何需要指出正确方向的问题都是“plzsendtehcodez”??

标签: php regex domparser


【解决方案1】:

一种不太聪明的方法是计算所有打开的div 标签。假设你得到 n。现在找到第 n-5 个 div 标记,然后从那里找到第 5 个结束 div 标记。介于两者之间的一切都是您要寻找的。​​p>

打开div标签的数量可以这样获取:

$num_div_tags = count(explode('<div', strtolower($string))) - 1;

从那里,找出倒数第五个div 标签应该相当简单。

此解决方案的优雅与 PHP 的优雅完美契合。


如果你对这个解决方案不满意,你不妨想出一个简单的有限状态机,它逐个字符地遍历字符串,检测打开和关闭div 标签,将每一对保存在一个长度为的循环列表中5 并在到达字符串末尾时打印所有列表元素。

【讨论】:

    【解决方案2】:

    xpath 怎么样?

    $xpath = new DOMXPath($dom);
    foreach($xpath->query('//div[position()>last()-5]') as $div){
      echo $dom->saveHTML($div);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2018-06-26
      • 2011-08-04
      • 2012-07-20
      相关资源
      最近更新 更多