2012-09-26 6 views
-1

안녕 내 출력 PHP 코드는배열 문자열의 일부를 가져

<?php 
     $ip = $_SERVER['REMOTE_ADDR']; 
     print_r(geoCheckIP($ip)); 
     //Array ([domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen) 

     //Get an array with geoip-infodata 
     function geoCheckIP($ip) 
     { 
       //check, if the provided ip is valid 
       if(!filter_var($ip, FILTER_VALIDATE_IP)) 
       { 
         throw new InvalidArgumentException("IP is not valid"); 
       } 

       //contact ip-server 
       [email protected]_get_contents('http://www.netip.de/search?query='.$ip); 
       if (empty($response)) 
       { 
         throw new InvalidArgumentException("Error contacting Geo-IP-Server"); 
       } 

       //Array containing all regex-patterns necessary to extract ip-geoinfo from page 
       $patterns=array(); 

       $patterns["country"] = '#Country: (.*?)&nbsp;#i'; 

       //Array where results will be stored 
       $ipInfo=array(); 

       //check response from ipserver for above patterns 
       foreach ($patterns as $key => $pattern) 
       { 
         //store the result in array 
         $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : ''; 
       } 

       return $ipInfo; 
     } 

?> 

내가처럼 국가의 이름을 얻을 수있는 방법 내 사건 "불가리아"? 내가 preg_replace 또는 substr 일어날 것이라고 생각하지만 지금은 더 나은 해결책은 무엇인지 모르겠다.

답변

2

SUBSTR 년대 아마 가장 쉬운 : '-'국가는 항상 의해 약어 분리되어

$bad_country = 'BG - Bulgaria'; 
$good_country = substr($bad_country, 5); // start at char 5, 'B' 
+0

고마워,이 날 위해 작품 + – MOTIVECODEX

0

경우, 이런 식으로 작업을 수행합니다

list($acrn, $country) = explode(' - ', $var); 
0

당신이 보장하는 경우 그 출력은 항상 것입니다 같은 형식 (예 : BG - 불가리아, 미국 - 미국 등) 일 경우 explode() :

$array['country'] = "BG - Bulgaria"; 
$country = explode(" - ", $array['country']); 
echo $country[1]; 

"불가리아"가 출력됩니다.

0

시도 :이 당신의 패턴을 변경하여 패턴

0
$patterns["country"] = '#Country:.*-\s+(\w+?)&nbsp;#i'; 

:

'#Country: [a-z]{2,} - (.*?)&nbsp;#i' 

을 패턴을 가정은 변경되지 않습니다

+0

이미 패턴을 가지고 당신이 그나마 여분의 불필요한 computaion을 추가합니다 preg_replace 또는 substr을 사용하고 싶지 않아요 – Surace

0

으로이 일을하려고

foreach($list as $v) { 
    $temp = explode(' - ', $v);   
    $countries[] = $temp[1]; 
}