sscanf() 不解析纬度/经度字符串

问题描述 投票:0回答:3

我有这个字符串:

City Lat/Lon: (50.7708) / (6.1053)

我尝试用 php 中的 sscanf 这样提取这两个数字:

$result = post_request('http://www.ip-address.org/lookup/ip-locator.php', $post_data);
$start =strpos($result['content'], "City Lat/Lon");
$end = strpos($result['content'], "IP Language");
$sub = substr($result['content'],$start,$end-$start);
sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd);
echo $asd;

但它没有给我任何结果或错误我应该改变什么?

这样就可以了

sscanf("City Lat/Lon: (50.7708) / (6.1053)", "City Lat/Lon: (%f) / (%f)",$asd,$wer);
php string extract scanf
3个回答
2
投票

看来您正在使用

post_request()
here找到的功能。

如果是这样,您的

$sub
变量包含在响应中找到的各种 HTML 标签。例如,如果您尝试:

var_dump($sub) // Outputs: string 'City Lat/Lon:</th><td class='lookup'> (50.7708) / (6.1053)</td></tr><tr><th>' (length=78)

代替 sscanf,您可以尝试使用正则表达式来匹配纬度和经度(如 @Headshota 所建议)。例如一种可能的解决方案:

//...

preg_match('#\((?<lat>-?[0-9.]+)\) / \((?<lon>-?[0-9.]+)\)#', $sub, $matches);
echo $matches["lat"]; // Outputs 50.7708
echo $matches["lon"]; // Outputs 6.1053

1
投票

对我有用:

$sub = 'City Lat/Lon: (50.7708) / (6.1053)';
var_dump( sscanf($sub, "City Lat/Lon: (%f) / (6.1053)",$asd), $asd);

...打印:

int(1)
float(50.7708)

错误可能出现在您的确切测试代码中或其他地方。


0
投票

使用正则表达式:

 preg_match_all("/(\([0-9.]+\))/");

这将返回一个包含您的值的数组。

© www.soinside.com 2019 - 2024. All rights reserved.