訪問した Web サイトが保存されているリスト (1000 個) があり、最も訪問された Web サイトのトップ 5 を表示する必要があります。
$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
最大値に関連付けられたキー (Web サイト) を見つけます。
カウントが最大の Web サイトが複数ある場合は、最も頻繁に使用される Web サイトの配列が返されることに注意してください。
これを試して
$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, ...)