0

我正在尝试从文本框发布的数据中处理一个数组。
我编写了以下代码来修剪每一行,除了一件事之外,我几乎所有的东西都工作得很好。我相信我需要通过这个 GeoIP 函数迭代我的数字数组:
$record = geoip_record_by_addr($gi,$value);,但它只处理数组中的最后一个 IP,而不是整个东西。

我的 var_dump:字符串(12)“65.87.12.213”字符串(12)“13.15.200.36”

$gi = geoip_open("/tmp/GeoIPCity.dat",GEOIP_STANDARD);

$iips = explode("\n", $_POST["ip"]);
$iiips=array_map('trim',$iips);
foreach($iiips as $key => $value) {
    $record = geoip_record_by_addr($gi,$value);
}
print $record->city . "\n";
print $record->region . " " . "\n";
print $record->country_name . "\n";

$record1 = $record->city . " " . $record->region . " " . $record->country_name;

var_dump($record1);

有没有人可以帮忙?

4

2 回答 2

2

foreach循环内部,你一直覆盖$record变量,所以最后你有最后一个。

将所有记录存储到另一个数组中,你应该没问题。

所以这只是你犯的一个或多或少简单的错误。

$records = array();
foreach ($iiips as $key=>$value) {
    $records[] = geoip_record_by_addr($gi, $value);
}

foreach ($records as $record) {

    echo $record->city, "\n",
         $record->region, "\n",
         $record->country_name, "\n";

    $record_string = $record->city . " " . $record->region . " " . $record->country_name;

    var_dump($record_string);
}
于 2013-01-06T22:44:44.053 回答
0

而不是$record = geoip_record_by_addr($gi,$value);,请执行以下操作:

$record = array();
foreach($iiips as $value) { // key isnt needed.
    array_push($record, geoip_record_by_addr($gi,$value));
}

然后您就可以$record按照您的预期自由使用 的内容了。在任何循环中重新分配变量都会每次更改该特定变量的值。PHP 不知道您正在使用数组,除非您告诉它。

于 2013-01-06T22:48:24.277 回答