array_unique和PHP简单的HTML DOM解析器提供重复值

时间:2014-09-13 18:19:47

标签: php html parsing dom

我有一个简单的PHP Simple HTML DOM Parser设置来获取外部dofollow链接并获取所有内部链接并打印结果:

$url = "http://example.com";
$domain = parse_url($url, PHP_URL_HOST);

$html = new simple_html_dom();
$html->load_file($url);
$result = array();
$result1 = array_unique($result);

foreach($html->find('a') as $a){
    $href = $a->href;
    if (strpos($href, '://')!==false AND strpos($href, $domain)==false AND isset($e->rel)==false) 
    { $result1[] = $href; echo $href.'<br />';}
}

foreach($html->find('a') as $a){
    $href = $a->href;
    if (strpos($href, '://')==false or strpos($href, $domain)!==false) 
    { $result1[] = $href; echo $href.'<br />';}
}

由于某种原因,array_unique无效,打印的内部链接列表包含重复项。

如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

嗯,实际上在脚本的最后,$ result1数组不是唯一的,因为你在创建它之前创建它并且从$ result是一个空数组。 正如@Deep所说,你需要在推送所有项目后将其放入

试试这个:

...
$result = array();

foreach($html->find('a') as $a){
    $href = $a->href;
    if (strpos($href, '://')!==false AND strpos($href, $domain)==false AND isset($e->rel)==false) 
    { $result[] = $href; echo $href.'<br />';}
}

foreach($html->find('a') as $a){
    $href = $a->href;
    if (strpos($href, '://')==false or strpos($href, $domain)!==false) 
    { $result[] = $href; echo $href.'<br />';}
}

$result1 = array_unique($result);
...