在找到案件后移至下一行

时间:2016-04-20 07:27:17

标签: php foreach while-loop

我试图将数据库中的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;

1 个答案:

答案 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);