PHP 从数组中删除 URL(如果不是唯一的)


PHP Remove URL from array if not unique

我有大量的 url,比如说 500 个 url,现在使用 array_unique 我可以删除任何重复的值。但是,我想删除域相同的任何重复值,同时保留原始域(因此仅删除重复项,因此此值现在是唯一的)。

我一直在使用以下内容,但这只会删除重复的值:

$directurls = array_unique($directurls);

我一直在尝试以下内容来获取域,但我想知道如何检查整个数组中其他parse_url域:

foreach($directurls as $url) {
$parse = parse_url($url);
print $parse['host']; //the domain name I just need to find a way to check this and remove it
}

我想我需要使用某种形式的循环,也许我可以在其中获取当前主机并检查数组中的所有其他主机。如果重复项,则删除所有重复项并保持当前值。也许这样的东西可以工作,我现在只是在测试它:

foreach($directurls as $url) {
    $parse = parse_url($url);
    if (in_array($parse['host'], $directurls)) {
        //just looking for a way to remove while keeping unique
    }
}

如果有人对其他方法有任何建议或建议,我将不胜感激。

如果我需要解释更多,请告诉我。

您可以通过将 array_map() 与回调函数一起使用来避免循环访问 URL。使用 parse_url() 获取域,然后创建一个仅包含域的新数组。现在,您可以简单地创建一个新数组,将 URL 作为键,将域作为值,只需调用 array_unique() 即可获取唯一项。现在,要仅将 URL 放入新数组中,您可以使用 array_keys()

$domains = array_map(function($d) {
    $parts = parse_url($d);    // or: parse_url($d)['host'] if PHP > 5.4
    return $parts['host'];     
}, $directurls);
$result = array_keys(array_unique(array_combine($directurls, $domains)));

演示!