0

我有一个列表,其中存储了访问过的网站(一千个),我需要显示 TOP 5 Most Visited Websites :

$websites= "site#1.com site#2.com site#1.com site#1.com site#3.com ... "
4

5 回答 5

2

那是一个字符串,所以你必须把它转换成一个数组:

$websites_array = explode(" ", $websites);

然后你可以得到元素频率

$frequencies=array_count_values($websites_array)
$most_frequent_websites=array_keys($frequencies, max($frequencies))

array_count_values返回一个频率图,找到与array_keys最大值关联的键(网站)。

请注意,如果您有多个网站的数量最多,它将返回一系列最常见的网站。

于 2013-05-14T12:52:37.053 回答
1

尝试这个

$sites = explode(' ',$site_string);
$top5 = array_count_values($array);
rsort($top5);
$top5 = array_slice($top5, 0, 5);
于 2013-05-14T12:57:11.107 回答
0

这是故意冗长的,所以你明白发生了什么:

<?php

$websites = "site#1.com site#2.com site#1.com site#1.com site#3.com";

//presuming they'll always be seperated by a single space...
$sites = explode(' ', $websites);

$siteCount = array();

foreach ($sites as $site) {
  if (!isset($siteCount[$site])) {
    $siteCount[$site] = 1;
  } else {
    $siteCount[$site]++;
  }
}

arsort($siteCount);

$finalArray = array_slice($siteCount, 0, 5);

var_dump($siteCount);

哪个输出:

array(3) {
  ["site#1.com"]=&gt;
  int(3)
  ["site#3.com"]=&gt;
  int(1)
  ["site#2.com"]=&gt;
  int(1)
}
于 2013-05-14T12:59:24.740 回答
0

最简单的解决方案:

$websites= "site#1.com site#2.com site#1.com site#1.com site#3.com site#2.com";
$sites = explode(' ', $websites);
foreach($sites as $site)
    $visits[$site]++;

// Sort by descending number of visits
arsort($visits);  
var_dump($visits);

工作样本

于 2013-05-14T12:53:46.297 回答
-1

我们可以这样做:

$websites_array = explode(' ', $websites);

$top_websites = array_count_values($websites_array);

asort($top_websites);

// $top_websites = array('#site2' => 5, '#site4' => 4, '#site1' => 2, ...)
于 2013-05-14T13:00:04.063 回答