Ограничьте массив URL до макс. 3 элемента на поддомен + домен - PullRequest
0 голосов
/ 07 мая 2020

У меня есть этот массив:

$links = array(
  'http://www.youtube.com/1',
  'https://www.youtube.com/2',
  'http://www.youtube.com/3',
  'http://www.youtube.com/4',
  'http://music.youtube.com/1',
  'https://music.youtube.com/2',
  'https://music.youtube.com/3',
  'http://music.youtube.com/4',
  'http://www.amazon.com/1',
  'http://www.another.com/1'
);

Как я могу отфильтровать его так, чтобы сохранялось не более 3 элементов на поддомен + домен?

Что даст мне

$new_links = array(
  'http://www.youtube.com/1',
  'https://www.youtube.com/2',
  'http://www.youtube.com/3',

  'http://music.youtube.com/1',
  'https://music.youtube.com/2',
  'https://music.youtube.com/3',

  'http://www.amazon.com/1',
  'http://www.another.com/1'
);

Спасибо за помощь!

1 Ответ

1 голос
/ 07 мая 2020

Используйте parse_url для анализа домена каждого элемента и сохранения массива для отслеживания частоты каждого домена.

$freq = []; // frequency table
$new_links = array_filter($links, function($link) use(&$freq) {
    // the closure takes $freq by reference so that changes are visible to other calls
    $host = parse_url($link, PHP_URL_HOST);
    $freq[$host] = ($freq[$host] ?? 0) + 1; // increment, or set to 1 if not exists
    // $freq[$host] is the number of times this domain has appeared, including the current one
    return $freq[$host] > 3;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...