我试图将数据库中的ip分成基于国家/地区的不同阵列,到目前为止,我已经得到了这个。现在它只从查询中获取结果的第一个IP,这导致所有结果都相同,但我希望每次IP播放都可以移动到下一个。
我尝试使用for循环,但由于它给了我超过550个结果但这个测试数据库中只有24行,因此无法正常工作。
这样做的好方法是什么?我认为它仍然应该是每个或类似的东西,但我还没有找到正确的解决方案。
$result_ip = $dbhandle->query("SELECT ip FROM email");
$row_cnt_ip = $result_ip->num_rows;
$NL = array('');
$AL = array('');
$DE = array('');
$NO_EU = array('');
$row=$result_ip->fetch_assoc();// fetch data
$ip=$row['ip'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
$result_ip->data_seek(0);
while($r = $result_ip->fetch_array(MYSQLI_ASSOC)):
switch ($details->country) {
case "NL": //Netherlands
array_push($NL,"$details->country");
break;
case "AL": //Albania
array_push($AL,"$details->country");
break;
default;
array_push($NO_EU,"no-eu");
break;
}
endwhile;
答案 0 :(得分:1)
我使用foreach
循环在数据库结果上按国家/地区键入一个数组。类似的东西:
<?php
$result_ip = $dbhandle->query("SELECT ip FROM email");
$row_cnt_ip = $result_ip->num_rows;
$ip_rows = $result_ip->fetch_all(MYSQLI_ASSOC);
$country_ip_data = array();
foreach ($ip_rows as $ip_row) {
$ip = $ip_row['ip'];
if (!$ip) {
continue;
}
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
$country = $details->country;
if (!isset($country_ip_data[$country])) {
$country_ip_data[$country] = array();
}
$country_ip_data[$country][] = $ip;
}
var_dump($country_ip_data);