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

У меня есть некоторые трудности, чтобы получить хорошее представление о том, как отделить значения от массивов. Например, у меня есть 3 массива URL:

$urlsFromA = ['http://www.test.com', 'http://www.example.com', 'http://www.google.com', 'http://www.twitter.com'];
$urlsFromB = ['https://www.test.com', 'http://www.example.com', 'http://www.bing.com'];
$urlsFromC = ['http://www.test.com', 'http://www.google.com'];

Мне необходимо foreach все массивы и получить другие значения массивов, которые я дублирую в этих стартовых массивах и удаляю из стартовых массивов, если они встречаются в других.
Это немного помеха. Потому что URL-адреса могут отличаться от «https», например, но я должен относиться к ним, как будто они одинаковы. Таким образом, мой результат будет массивами с URL-адресами, названными в качестве источника этих URL-адресов:

$urlsFromABC = ['http://www.test.com'];
$urlsFromAB = ['http://www.example.com'];
$urlsFromAC = ['http://www.google.com'];
$urlsFromBC = [];

$dataFromA = ['http://www.twitter.com'];
$urlsFromB = ['http://www.bing.com'];
$urlsFromC = [];

В $ urlsFromABC у меня есть URL, который был во всех массивах при запуске (несмотря на то, что он отличается из-за ‘https’). В начальных массивах ($ dataFromA, $ urlsFromB, $ urlsFromC) должны быть URL-адреса, которые не дублируются в других стартовых массивах. Может быть, у кого-то есть идеи, как я могу это сделать?

0

Решение

Сначала вам нужно создать функцию, которая меняет https с http как это:

function replace($arr){
foreach($arr as $key => $ar){
$ar = str_replace('https', 'http', $ar);
$arr[$key] = $ar;
}
return $arr;
}

Вы будете вызывать эту функцию так:

$urlsFromA = replace($urlsFromA);
$urlsFromB = replace($urlsFromB);
$urlsFromC = replace($urlsFromC);

После этого вы можете играть с этими двумя функциями: array_diff а также array_intersect,

Например array_intersect:

$urlsFromABC = array_intersect($urlsFromA, $urlsFromB, $urlsFromC);

Это вернет все значения, которые существуют во всех массивах. Вы можете положить, сколько массивов вы хотите.

А также array_diff:

$urlsFromA = array_diff($urlsFromA, $urlsFromB, $urlsFromC);

Это вернет значения, которые находятся в первом массиве, а не в другом. Вы можете положить, сколько массивов вы хотите.

Вы можете попробовать, сколько дел вы хотите. Надеюсь, поможет!

1

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

Других решений пока нет …

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