0

テキストボックスから投稿されたデータから配列を処理しようとしています。
次のコードを記述して、新しい行をそれぞれトリミングしました。1つを除いて、ほぼすべてが完全に機能しています。このGeoIP関数を使用して数値配列を反復処理する必要があると思います
$record = geoip_record_by_addr($gi,$value);が、配列内の最後のIPのみを処理し、全体を処理するわけではありません。

私のvar_dump:string(12) "65.87.12.213" string(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 に答える