2013-05-14 25 views
0

我在這所訪問的網站存儲在表(千)顯示5分最reccurent的話,我需要顯示前5個最常用的網站:PHP如何在一個列表

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

列表從哪裏來的?數據應該有更多可用的來源。如果不是,額外的工作(儘管不是很多)將是必需的。 – MatthewMcGovern 2013-05-14 12:49:28

+2

你已經試過了什麼?這個網站是爲了幫助你理解,而不是爲你做 – LeonardChallis 2013-05-14 12:49:33

+0

我嘗試了很多東西,但沒有像使用兩個循環一樣工作 – Falcon 2013-05-14 12:53:36

回答

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) 
} 
+0

是的,它有效,所以有辦法操縱結果,以便我可以顯示百分比,儘管int(x),知道我已經有訪問的網站總數'$ total' – Falcon 2013-05-14 13:18:07

+0

是的。將值加起來得到總數,然後除以100。 – LeonardChallis 2013-05-14 13:21:47

+0

是的我知道,但你怎麼做的數組?如果它是一個簡單的變量,它會更容易 – Falcon 2013-05-14 13:39:44

2

這是一個字符串,所以你必須把它轉換成一個數組:

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

那麼你可以得到要素頻率與

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

array_count_values返回頻率圖,array_keys找到與最大值關聯的密鑰(網站)。

請注意,如果您有多個網站的計數最高,它將返回一個最常見的網站數組。

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); 

Working sample

+0

但我怎麼可以而不是顯示int(x)顯示一個百分比,知道我已經有總數? – Falcon 2013-05-14 14:50:38

1

試試這個

$sites = explode(' ',$site_string); 
$top5 = array_count_values($array); 
rsort($top5); 
$top5 = array_slice($top5, 0, 5); 
-1

我們可以做到這一點的方法:

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

$top_websites = array_count_values($websites_array); 

asort($top_websites); 

// $top_websites = array('#site2' => 5, '#site4' => 4, '#site1' => 2, ...) 
+0

你認爲'asort'會返回什麼?它返回一個布爾值,而不是一個數組。 – Bart 2013-05-14 13:07:12

+0

Ooops ...修改! – Strategio 2013-05-14 13:09:36