如何从大型URL列表中删除重复域

时间:2013-01-31 11:29:57

标签: php regex

我想要删除URL列表中的重复域,例如下面是文本文件

http://www.exampleurl.com/something.php
http://www.domain.com/something.php
http://www.exampleurl.com/something111.php 
http://www.exampleurl.com/something111.php 
http://www.exampleurl.com/something222.php 

我需要删除重复的域名,我需要在列表下方

http://www.exampleurl.com/something.php
http://www.domain.com/something.php

下面是只删除文本文件中重复项的代码。     

$text = array_unique(file($filename));

$f = @fopen("promo1.txt",'w+');
if ($f) {
  fputs($f, join('',$text));
  fclose($f);
}

?>

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

$urls = file('domains.txt');
$uniqueDomains = array_reduce (
    $urls,
    function (array $list, $url) {
        $domain = parse_url($domain, PHP_URL_HOST);
        if (!isset($list[$domain])) $list[$domain] = $url;
        return $list;
    },
    array()
);

$uniqueDomains将主机名作为键。如果您不需要(和/或想要),请使用array_values($uniqueDomains);

答案 1 :(得分:0)

要在域名上进行比较,您可以使用parse_url

<?php
$text = file_get_contents("input.txt");
$lines = explode("\n",$text);
$filtered_domains = array();
foreach($lines as $line)
{
    $parsed_url = parse_url($line);
    if(array_search($parsed_url['host'], $filtered_domains) === false)
    {
        $filtered_domains[$line] = $parsed_url['host'];
    }
}
$output = implode("\n", array_keys($filtered_domains));
file_put_contents("output.txt", $output);
?>

答案 2 :(得分:0)

<?php
/*
$lines = file('textfile.txt');
*/
$lines = array(
'http://www.exampleurl.com/something.php',
'http://www.domain.com/something.php',
'http://www.exampleurl.com/something111.php',
'http://www.exampleurl.com/something111.php',
'http://www.exampleurl.com/something222.php'
);
foreach($lines as $line){
 $url_parsed = parse_url($line);
 if(is_array($url_parsed)){
  $host = $url_parsed['host'];
  if(!@$uniques[$host]){
   $uniques[$host] = $line;
  }
 }
}
echo join('',$uniques);
$f = @fopen("promo1.txt",'w+');
if ($f) {
  fputs($f, join("\n",$uniques));
  fclose($f);
}
?>

答案 3 :(得分:-1)

要从数组中删除重复项,您可以使用array_unique()。要使列表成为数组,您可以使用explode()。然后再次使它成为一个字符串,你可以使用implode()。

要将所有内容放在一起,您可以使用以下代码:

$list = "http://www.exampleurl.com/something.php
        http://www.domain.com/something.php
        http://www.exampleurl.com/something111.php 
        http://www.exampleurl.com/something111.php 
        http://www.exampleurl.com/something222.php";

$newList = implode("\n", array_unique(explode("\n", $list)));