PHP 如果 URL 不唯一,则从数组中删除 URL

标签 php

我有一个很大的数组,比如说 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)));

Demo!

关于PHP 如果 URL 不唯一,则从数组中删除 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19663232/

相关文章:

php - MySQL LEFT JOIN 列为空

php - Angularjs,从 IE 中的 url 中删除 #

php - 使用按钮更新 MySQL 表而不使用 ajax 刷新页面

php - array_key_exists() 错误/编辑供应商文件

php - MySql、Php 未设置为 UTF8

php - VSCode 扩展 Intelephense 给出错误 "Undefined method ' xxx'。 Intelephense (1013)”具有多态性和动态绑定(bind)

php - 在 PHP 中获取上传文件扩展名的最佳方法/实践是什么

php - 在 PHP 中提交表单时如何防止多次插入?

php - 如何从 Symfony 中的 Sentry 中排除异常?

php - 如何反转foreach $key value PHP?