【问题标题】:Get part of array string获取数组字符串的一部分
【发布时间】:2012-09-26 15:26:54
【问题描述】:

您好,我的输出 PHP 代码是:

Array ( [country] => BG - Bulgaria )

...他来自这里:

<?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
               $response=@file_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 会发生这种情况,但我不知道现在有什么更好的解决方案。

【问题讨论】:

    标签: php location geo geoip locate


    【解决方案1】:

    substr 可能是最简单的:

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

    【讨论】:

      【解决方案2】:

      如果国家和首字母缩写词总是用' - '隔开,这样做:

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

      【讨论】:

        【解决方案3】:

        如果您保证输出始终采用相同的格式(即BG - 保加利亚US - 美国 等),您可以使用@987654321 @:

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

        这将输出“保加利亚”。

        【讨论】:

          【解决方案4】:

          尝试:

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

          【讨论】:

            【解决方案5】:
            $patterns["country"] = '#Country:.*-\s+(\w+?)&nbsp;#i';
            

            试试这个作为你的模式

            【讨论】:

            • 你已经有了模式,我猜你不想使用 preg_replace 或 substr 因为它会增加额外的不必要的计算
            【解决方案6】:

            把你的模式改成这样:

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

            假设模式不会改变

            【讨论】:

              猜你喜欢
              • 2011-06-14
              • 2016-06-13
              • 1970-01-01
              • 2015-02-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多