2

我有一大堆可以说 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
    }
}

如果有人对解决此问题的其他方法有任何建议或建议,我将不胜感激。

让我知道是否需要更多解释。

4

1 回答 1

2

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)));

演示!

于 2013-10-29T16:21:10.957 回答