【发布时间】:2017-03-02 12:37:15
【问题描述】:
我正在尝试使用 a 标记类将 html 格式数据解析为数组,但我无法获得所需的格式。以下是我的数据
$text ='<div class="result results_links results_links_deep web-result ">
<div class="links_main links_deep result__body">
<h2 class="result__title">
<a rel="nofollow" class="result__a" href="">Text1</a>
</h2>
<a class="result__snippet" href="">Text1</a>
<a class="result__url" href="">
example.com
</a>
</div>
</div>
<div class="result results_links results_links_deep web-result ">
<div class="links_main links_deep result__body">
<h2 class="result__title">
<a rel="nofollow" class="result__a" href="">text3</a>
</h2>
<a class="result__snippet" href="">text23</a>
<a class="result__url" href="">
text.com
</a>
</div>
</div>';
我正在尝试使用以下代码获取结果
$lines = explode("\n", $text);
$out = array();
foreach ($lines as $line) {
$parts = explode(" > ", $line);
$ref = &$out;
while (count($parts) > 0) {
if (isset($ref[$parts[0]]) === false) {
$ref[$parts[0]] = array();
}
$ref = &$ref[$parts[0]];
array_shift($parts);
}
}
print_r($out);
但我需要完全像下面的结果
array:2 [
0 => array:3 [
0 => "Text1"
1 => "Text1"
2 => "example.com"
]
1 => array:3 [
0 => "text3"
1 => "text23"
2 => "text.com"
]
]
即使我在 laravel 中尝试 dom 如下所示:
$dom = new DOMDocument;
$dom->loadHTML($text);
foreach($dom->getElementsByTagName('a') as $node)
{
$array[] = $dom->saveHTML($node);
}
print_r($array);
那么我怎样才能使用这些类来分离我想要的数据。请有任何建议。谢谢。
【问题讨论】:
-
您应该使用
SimpleXML或 XmlReader/XmlParser 或 DOM 解析类。爆破>不靠谱。 -
即使我也尝试过,但没有得到准确的结果:
-
$dom = new DOMDocument; $dom->loadHTML($text); foreach($dom->getElementsByTagName('a') as $node) { $array[] = $dom->saveHTML($node); } print_r($array); -
您的 html 示例无法重现您的真实 html 内容的结构。
-
@CasimiretHippolyte :请检查下面的链接与我的实际数据 [eval.in/746302] 但是当我尝试使用相同的概念从代码中删除 \n 使用
preg_replace("/\r\n|\r|\n|'/", ' ', $text);时,它给了我trying to non object error.
标签: php arrays laravel-5.4