我有一个很大的数组,比如说 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)));
关于PHP 如果 URL 不唯一,则从数组中删除 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19663232/