从文件中检索前 10 条注释.html



我咕噜咕噜地呆了几个小时,就是找不到答案。请建议:

有一个.html文件,该文件仅包含用户注释的段落,例如:

<p>12/02/2012 4:32pm Mark</p>
<p>Hi! it's a nice demo! Really thankful</p>
<hr>
<p>11/02/2012 11:03am Miron</p>
<p>How to change the font size from CFD again?</p>
<hr>
<!-- AND LOADS OF OTHER <P><P> COMMENTS DELIMITED BY <HR> ... -->

有 1000 条评论的结构是这样的,
我想以某种方式抓住最新的 10 条(不是按日期,只是前"十条"评论)。我不知道怎么做。

我知道我可以使用 jQuery 的.load('comments.html'),而不是删除除前 10 条注释之外的所有元素,甚至使用 PHP 包含整个文件,然后使用 jQuery 进行.hide()......但是加载整个文件只包含 10 条评论是个好主意?

如何拆分该文件并进入<div id="latest_10_comments"></div> comments.html文件中的前 10 条评论?

我知道

你想要一个JavaScript解决方案,但你可以通过使用爆炸函数在PHP中做到这一点。

像这样:

$comments = explode("<hr>", file_get_contents("/comments.html"));
for($i = 0; $i < 10; $i++) {
   print($comments[$i]);
}

这将创建一个名为 $comments 的数组,该数组是注释中的每个注释.html由

<hr>

标记。

首先,我建议完全重新考虑你解决这个问题的方法。为什么要以这种方式将所有内容存储在HTML文件中?如果要按需动态加载某些注释,则应将其存储为 XML 文件或存储在数据库中。

但是,要回答您的问题,如果您想在PHP中执行此操作,则需要使用像PHP的DomDocument这样的X/HTML解析器。这是一个工作示例...

编辑更改以反映 OP 的所需行为):

$dom = new DomDocument;
$dom->loadHTMLFile("comments.html");
// Get all the P tag elements in the DOM
$comments = $dom->getElementsByTagName('p');
// Get only the first 10
$amount = 10; // number of comments you want
foreach ($comments as $num => $comment_nodes) {
    if ($num + 1 > $amount)
        break;
    echo $comment_nodes->nodeValue, PHP_EOL;
}

解决方案 1。您可以使用正则表达式模式匹配 2 个 p 标签,后跟 hr,并重复该模式 10 次。

解决方案 2.来自其他答案(CHRIS)的想法,但由于在PHP中存在错误,因此我建议这样做。

    $comments = explode("<hr>", file_get_contents("/comments.html"));
    for($i = 0; $i < 10; $i++) {
       print($comments[$i]);
    }
$("<p>").each(function(index, value)
{
    //Do what you want here
}

这将循环遍历您的所有<p>。如果您知道元素的顺序,那么您可以根据 index 对它们做您想做的事情。

最新更新