PHP Filter Array для двойных элементов

У меня есть вопрос.
Я получил массив, который заполнен внешними ссылками, такими как:

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

Спасибо за любую помощь.
Greats,
Traxstar

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 — Опускание строки URL для предотвращения http несоответствие с Http например

  • 1.2 — Удаление http:// & https:// из строк, чтобы все было в одном формате

  • 1.3 — Извлечение доменного имени верхнего уровня

  • 1.4 — Регистрация или увеличение $domains массив извлеченного доменного имени верхнего уровня

2 — Фильтрация массива (0, нуль, ложь, пустые строки, удалены, поэтому я регистрирую доменное имя с 0, а не с 1), чтобы сохранить только домены «сомнения» (те, которые присутствуют более одного раза в массив)

3 — Затем получить ключи массива (потому что ключи являются доменными именами)

Кстати, я использую PHP 5.6.2

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

Вы также должны попробовать это

шаг 1: получить все ссылки в одном массиве

$links = array(
www.google.de,
www.google.com/test,
www.google.de/test
www.google.de/fuuuu
)

Шаг 2: затем взорвать все одно из «/» и поместить их в один массив

$strip = array('http://','https://');
foreach($links as $dividelink){
$newone = explode("/",str_ireplace($strip,'',$dividelink));
$newone = $newone[0];
$newlinksDataArr[] = array(
"link" => $newone,
);
$newone=null;
}

Шаг-3: добавить функцию ниже

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

Шаг 4: используйте вышеуказанную функцию и получите уникальную ссылку

$d_array = unique_multidim_array($newlinksDataArr, "link");
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector