我有一个列表,其中存储了访问过的网站(一千个),我需要显示 TOP 5 Most Visited Websites :
$websites= "site#1.com site#2.com site#1.com site#1.com site#3.com ... "
那是一个字符串,所以你必须把它转换成一个数组:
$websites_array = explode(" ", $websites);
然后你可以得到元素频率
$frequencies=array_count_values($websites_array)
$most_frequent_websites=array_keys($frequencies, max($frequencies))
array_count_values
返回一个频率图,找到与array_keys
最大值关联的键(网站)。
请注意,如果您有多个网站的数量最多,它将返回一系列最常见的网站。
尝试这个
$sites = explode(' ',$site_string);
$top5 = array_count_values($array);
rsort($top5);
$top5 = array_slice($top5, 0, 5);
这是故意冗长的,所以你明白发生了什么:
<?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"]=>
int(3)
["site#3.com"]=>
int(1)
["site#2.com"]=>
int(1)
}
最简单的解决方案:
$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);
工作样本。
我们可以这样做:
$websites_array = explode(' ', $websites);
$top_websites = array_count_values($websites_array);
asort($top_websites);
// $top_websites = array('#site2' => 5, '#site4' => 4, '#site1' => 2, ...)