0

以下の php コードは、データベースに保存されている IP の国の場所を表示し、それを HTML テーブルに出力します。そのままで、個々の IP ごとに国コードの長いリストが作成されます。

例えば...

US
US
MX
US

私がやりたいのは、個々のアイテムの長いリストを作成するのではなく、アイテムが配列に表示される回数を表示することです。上記の例を使用すると...

国の頻度

米国 3
MX 1

これをどのように実装しますか?これが完全なコードです...

require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);


include_once($_SERVER['DOCUMENT_ROOT'] . 'connect.php'); 

/* Performing SQL query */
 $data = mysql_query("SELECT * FROM the_ips LIMIT 100")
 or die(mysql_error());

 echo "<table>";
 echo "<td><strong>Country</strong></td><td><strong>Frequency</strong></td></tr>";

 while($info = mysql_fetch_array( $data ))
     {
      $ip = $info['ip_address'];
      $country_code = geoip_country_code_by_addr($gi, $ip);
      $countrylist = array($country_code);
      $frequency = array_count_values($countrylist);

      echo "<tr><td style='width: 100px;'>".$country_code."</td><td style='width: 100px;'>".$frequency."</td></tr>";
     }
 echo "</table>";
 geoip_close($gi);

重複する「国」値を含む行を割り当て$frequencyて削除する必要がありますが、これを行う方法がわかりません。現状では、数値 (つまり、US 3) を期待していたときに、$frequency は "Array" を返します。

4

1 に答える 1

0

array_count_values()そのために機能を使用できます

次の簡単な例を想像してください。

$colors = array('red', 'green', 'red', 'blue');
var_dump(array_count_values($colors));

あなたに与えるもの:

array(3) {
  'red' =>
  int(2)
  'green' =>
  int(1)
  'blue' =>
  int(1)
}
于 2013-02-26T17:33:11.323 に答える