我有一个问题。 我有一个充满外部链接的数组,如:
www.google.de
www.google.com/test
等等。 不,我想让阵列填满。 如果数组中有链接,如下所示:
www.google.de
www.google.de/test
www.google.de/fuuuu
我只想获取www.google.de链接并过滤掉其余部分。 我首先使用array_diff_key,但这不应该像它应该的那样工作。 这是我的片段。
$d_array = array_diff_key($externalArray, array_unique($externalArray));
感谢您的帮助。 伟人, Traxstar
答案 0 :(得分:1)
最后,我做到了:
$arr = [
'www.google.de',
'http://www.google.de/test',
'www.google.de/fufufufu',
'www.google.com/cctvvmb',
'https://www.google.com/',
'google.co.uk/hello',
];
// based on http://stackoverflow.com/questions/1201194/php-getting-domain-name-from-subdomain
function get_domain($url)
{
if(preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $url, $regs))
{
return $regs['domain'];
}
return false;
}
function get_duplicated_domains($arr)
{
$domains = [];
// looping the array, processing all of it
foreach($arr as $url)
{
// lower text
$url = strtolower($url);
// removing eventual http & https
$url = str_replace('http://', '', $url);
$url = str_replace('https://', '', $url);
// replacing with the string before the first slash
$url = explode('/', $url);
// extracting top level domain
$url = get_domain($url[0]);
// Registering domain in $domains array or incrementing it
if(array_key_exists($url, $domains))
{
$domains[$url]++;
}
else
{
$domains[$url] = 0;
}
}
// gathering data
return array_keys(array_filter($domains));
}
$res = get_duplicated_domains($arr);
结果是:
Array
(
[0] => google.de
[1] => google.com
)
1 - 循环数组
1.1 - 降低网址字符串以防止http
与Http
不匹配,例如
1.2 - 删除http://
&amp;来自字符串的https://
,使其格式相同
1.3 - 提取顶级域名
1.4 - 在提取的顶级域名上注册或递增$domains
数组
2 - 过滤数组(0,null,false,空字符串,删除,这就是为什么我将域名注册为0而不是1),只保留&#39;怀疑&#39;域(在数组中出现多次的域)
3 - 然后获取数组的键(因为键是域名)
顺便说一句,我正在运行PHP 5.6.2
答案 1 :(得分:1)
您可以简单地使用parse_url,如:
$externalArray = array_reduce($externalArray, function ($carry, $url) {
if (strpos($url, 'http') !== 0) {
$url = 'http://' . $url;
}
$host = strtolower(parse_url($url, PHP_URL_HOST));
if (!in_array($host, $carry)) {
$carry[] = $host;
}
return $carry;
}, array());
答案 2 :(得分:-1)
你也应该尝试这个
第1步:将所有链接转换为一个数组
for
第二步:然后爆炸#34; /&#34;并将它们推入一个数组
$links = array(
www.google.de,
www.google.com/test,
www.google.de/test
www.google.de/fuuuu
)
步骤3:添加以下功能
$strip = array('http://','https://');
foreach($links as $dividelink){
$newone = explode("/",str_ireplace($strip,'',$dividelink));
$newone = $newone[0];
$newlinksDataArr[] = array(
"link" => $newone,
);
$newone=null;
}
第4步:在此处使用上述功能并获得唯一链接
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}