从.html文件中检索前10条评论

时间:2012-12-10 21:52:21

标签: php jquery readfile

我是goog好几个小时,但是找不到答案。请建议:

.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条评论?

4 个答案:

答案 0 :(得分:2)

我知道你想要一个JavaScript解决方案但是你可以通过使用explode函数在PHP中完成这个。

这样的事情:

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

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

分隔的每个注释
<hr>

标签

答案 1 :(得分:1)

首先,我建议完全重新考虑你对这个问题的处理方法。为什么用这种方式存储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;
}

答案 2 :(得分:0)

$("<p>").each(function(index, value)
{
    //Do what you want here
}

这将循环显示所有<p>。如果您知道元素的顺序,那么您可以根据index

执行您想要的操作

答案 3 :(得分:0)

解决方案1.您可以使用RegEx模式匹配2 p标签,然后是hr,并重复模式10次。

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

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