Php 比没有唯一标识符的DOM更好的方法?

Php 比没有唯一标识符的DOM更好的方法?,php,html,simple-html-dom,Php,Html,Simple Html Dom,我还在学习php简单DOM,遇到了一个令人困惑的场景。没有唯一的标签可以用来指定我想要的东西,它只是一大堆的 谢谢这是可能的,但是最好考虑标签的顺序而不是嵌套。 $articles = array(array()); foreach($html->find('comment, a') as $a) { if ($a->nodetype == HDOM_TYPE_COMMENT) { $articles[] = array(); } else {

我还在学习php简单DOM,遇到了一个令人困惑的场景。没有唯一的标签可以用来指定我想要的东西,它只是一大堆的



谢谢

这是可能的,但是最好考虑标签的顺序而不是嵌套。
$articles = array(array());
foreach($html->find('comment, a') as $a) {
    if ($a->nodetype == HDOM_TYPE_COMMENT) {
        $articles[] = array();
    } else {
        $articles[count($articles) - 1][] = array($a->href,$a->innertext);
    }
}
这段(相当粗糙的)代码将创建一个数组,一个用于第一条注释之前的任何
s,另一个用于每个注释,每个数组包含零篇或多篇文章,具体取决于其注释和下一条注释之间出现的链接数量

顺便说一句,这段代码对您提供的代码片段不起作用,因为其中的注释分别以
开头和
结尾,而不是
。我假设注释在实际的HTML标记中显示正确

编辑:好的,“注释”可以在代码段中找到。在本例中,simplehtml似乎调用了以
:“unknown”开头的所有其他标记。因此,如果您将其添加到上述代码中,您将拥有链接数组:

$articles = array(array());
foreach($html->find('comment, unknown, a') as $a) {
    if (in_array($a->nodetype, array(HDOM_TYPE_COMMENT, HDOM_TYPE_UNKNOWN))) {
        $articles[] = array();
    } else {
        $articles[count($articles) - 1][] = array($a->href,$a->innertext);
    }
}

是的,有可能。情况总是一样吗<代码>
注释之间的标记?我可能可以告诉你是否发布了一个代码片段,但我猜简单的html dom无法做到这一点。另一方面,Dom可能可以。我添加了一个片段。无情,是的,情况总是一样的。除了实际链接本身,没有任何变化。多刺的诺曼,谢谢。我要玩弄一下。不幸的是,我直接从HTML中复制了这段代码,这就是注释的方式,其中的一些注释。我想我会有更好的运气来做这个。嗨,编辑,这也是我的想法。然而,我刚刚查看了库,显然还有一个“未知”标记类型,它捕获以
开头的任何其他标记。试一试,也许你必须
array\u filter()
$articles = array(array());
foreach($html->find('comment, a') as $a) {
    if ($a->nodetype == HDOM_TYPE_COMMENT) {
        $articles[] = array();
    } else {
        $articles[count($articles) - 1][] = array($a->href,$a->innertext);
    }
}
$articles = array(array());
foreach($html->find('comment, unknown, a') as $a) {
    if (in_array($a->nodetype, array(HDOM_TYPE_COMMENT, HDOM_TYPE_UNKNOWN))) {
        $articles[] = array();
    } else {
        $articles[count($articles) - 1][] = array($a->href,$a->innertext);
    }
}