0

訪問した Web サイトが保存されているリスト (1000 個) があり、最も訪問された Web サイトのトップ 5 を表示する必要があります。

$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最大値に関連付けられたキー (Web サイト) を見つけます。

カウントが最大の Web サイトが複数ある場合は、最も頻繁に使用される Web サイトの配列が返されることに注意してください。

于 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 に答える