0

下面的 php 代码显示存储在数据库中的 IP 的国家/地区位置,并将其输出到 HTML 表中。照原样,它会为每个单独的 IP 创建一长串国家/地区代码。

例如...

美国
美国
MX
美国

我想做的是,而不是为每个单独的项目创建一个长列表,而是显示一个项目在数组中出现的次数。使用上面的示例...

国家频率

美国 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 回答