首页 > 解决方案 > 使用简单的 html dom 解析 html 的逻辑

问题描述

我很难使用解析结构simple html dom

`<div class="class1">class</div>
`<div class="class2">data2</div>
`<div class="class2">data3</div>

`<div class="class1">text</div>
`<div class="class2">...</div>

由于结构没有嵌套,所以我很难解析它。我希望将数据库class1作为主标题和class2子标题。因此,对于每一个class1,我都想阅读所有class2标签,直到另一个标签class1到来。希望它有意义。

标签: simple-html-dom

解决方案


您可以检查类元素以查看是否到达了另一个class1元素。这样的事情解释了一般的想法:

$str =<<<'html'

<div class="class1">class</div>
<div class="class2">data2</div>
<div class="class2">data3</div>

<div class="class1">text</div>
<div class="class2">...</div>
html;

$html = str_get_html($str);
// Store all results in a multi dimensional array
$result = [];

$group = -1;
foreach ($html->find('div') as $elem) {
    // if element class is class1, create a new array to gather data
    if($elem->class == 'class1') {
        $group++;
        $result[$group] = [];
    }
    $result[$group][] = $elem->plaintext;
}

print_r($result);

所以每次我们遇到一个新元素时,class1我们都会开始在一个新数组中收集信息,所以最终结果是一个嵌套数组,它按照您描述的方式对元素进行分组。


推荐阅读