Сравните имя хоста из массива URL и получите уникальные значения

Мне нужно сравнить URL-адреса и удалить дубликаты из массива, но я хочу сравнить только хост из URL. Мне нужно пропустить http и https и www и другие, как последний слэш, когда я сравниваю.
Итак, когда у меня есть массив:

    $urls = array(
'http://www.google.com/test',
'https://www.google.com/test',
'https://www.google.com/example',
'https://www.facebook.com/example',
'http://www.facebook.com/example');

Результат будет только

http://www.google.com/test
http://www.google.com/example
http://www.facebook.com/example

Я пытался сравнить, как:

$urls = array_udiff($urls, $urls, function ($a, $b) {
return strcmp(preg_replace('|^https?://(www\\.)?|', '', rtrim($a,'/')), preg_replace('|^https?://(www\\.)?|', '', rtrim($b,'/')));
});

Но он возвращает мне пустой массив.

1

Решение

<?php
$urls = array(
'http://www.google.com/test',
'https://www.google.com/test',
'https://www.google.com/example',
'https://www.facebook.com/example',
'http://www.facebook.com/example');$MyArray = [];
for($i=0;$i<count($urls);$i++)  {

preg_match_all('/www.(.*)/', $urls[$i], $matches);

if (!in_array($matches[1], $MyArray))
$MyArray[] = $matches[1];
}

echo "<pre>";
print_r($MyArray);
echo "</pre>";

И вывод

Array
(
[0] => Array
(
[0] => google.com/test
)

[1] => Array
(
[0] => google.com/example
)

[2] => Array
(
[0] => facebook.com/example
)

)

обрезается и сохраняется только имя хоста

1

Другие решения

Попробуйте этот подход:

<?php
function parseURLs(array $urls){
$rs = [];
foreach($urls as $url){
$segments = parse_url($url);
if(!in_array($segments['host'], $rs))
$rs[] = $segments['host'];
}
return $rs;
}

Затем :

<?php
$urls = array(
'http://www.google.com',
'https://www.google.com',
'https://www.google.com/',
'https://www.facebook.com',
'http://www.facebook.com'
);
$uniqueURLs = parseURLs($urls);
print_r($uniqueURLs);

/* result :
Array
(
[0] => www.google.com
[1] => www.facebook.com
)
*/
0

Вам нужно перебрать URL-адреса, проанализировать URL-адреса с помощью PHP url_parse() используйте функцию array_unique для удаления дубликатов из массива, поэтому мы проверяем хост и путь.

Я написал для вас класс:

<?php
/** Get Unique Values from array Values **/
Class Parser {
//Url Parser Function
public function arrayValuesUrlParser($urls) {
//Create Container
$parsed = [];
//Loop Through the Urls
foreach($urls as $url) {
$parse = parse_url($url);
$parsed[] = $parse["host"].$parse["path"];
//Delete Duplicates
$result = array_unique($parsed);
}
//Dump result
print_r($result);
}

}

?>

Используя класс

<?php
//Inlcude tghe Parser
include_once "Parser.php";

$urls = array(
'http://www.google.com/test',
'https://www.google.com/test',
'https://www.google.com/example',
'https://www.facebook.com/example',
'http://www.facebook.com/example');
//Instantiate
$parse = new Parser();
$parse->arrayValuesUrlParser($urls);

?>

Вы можете сделать это в одном файле, если вам не нужно разделять файлы, но вам придется удалить include_once, если вы используете один файл php. Этот класс также на PHP классы, сделал это для удовольствия!

Удачи !

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector