我有这个字符串:
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);
答案 0 :(得分: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)
您可以使用正则表达式(如@Headshota所建议的那样)尝试匹配纬度和经度,而不是sscanf。例如,一种可能的解决方案:
//...
preg_match('#\((?<lat>-?[0-9.]+)\) / \((?<lon>-?[0-9.]+)\)#', $sub, $matches);
echo $matches["lat"]; // Outputs 50.7708
echo $matches["lon"]; // Outputs 6.1053
答案 1 :(得分: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)
错误可以在您的确切测试代码中或其他地方。
答案 2 :(得分:0)
使用正则表达式:
preg_match_all("/(\([0-9.]+\))/");
这将返回一个包含您的值的数组。