Obtener parte de la cadena de matriz
Frecuentes
Visto 222 veces
-1
Hola, mi código PHP de salida es:
Array ( [country] => BG - Bulgaria )
... y viene de aquí :
<?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: (.*?) #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;
}
?>
¿Cómo puedo obtener SOLO el nombre del país como en mi caso "Bulgaria"? Creo que sucederá con preg_replace o substr pero no sé cuál es la mejor solución ahora.
6 Respuestas
2
substr probablemente sea más fácil:
$bad_country = 'BG - Bulgaria';
$good_country = substr($bad_country, 5); // start at char 5, 'B'
Respondido el 26 de Septiembre de 12 a las 16:09
0
si el país siempre se separa de las siglas por '-', hazlo así:
list($acrn, $country) = explode(' - ', $var);
Respondido el 26 de Septiembre de 12 a las 16:09
0
Si tiene la garantía de que la salida siempre estará en el mismo formato (es decir, BG-Bulgaria, Estados Unidos - Estados Unidos, etc.), puede usar explode()
:
$array['country'] = "BG - Bulgaria";
$country = explode(" - ", $array['country']);
echo $country[1];
Esto generará "Bulgaria".
Respondido el 26 de Septiembre de 12 a las 16:09
0
tratar:
foreach( $list as $v) {
$temp = explode(' - ', $v);
$countries[] = $temp[1];
}
Respondido el 26 de Septiembre de 12 a las 16:09
0
$patterns["country"] = '#Country:.*-\s+(\w+?) #i';
prueba este como tu patrón
Respondido el 26 de Septiembre de 12 a las 16:09
0
Cambia tu patrón a este:
'#Country: [a-z]{2,} - (.*?) #i'
Asumiendo que el patrón no cambiará
Respondido el 26 de Septiembre de 12 a las 17:09
ya tiene un patrón y supongo que no quiere usar preg_replace o substr ya que agregará un cálculo adicional innecesario: Superficie