我有大量的 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)));
演示!