2011-08-15 66 views
0

我有這個字符串:PHP sscanf的問題

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

提供您的代碼來分配'$ sub'。 –

+0

好的我編輯了問題 – TasostheGreat

+0

我認爲你的代碼適合'sscanf'。你的問題是解析你的Lat/Long數據。做一個'echo $ sub;'並確保它是你期望的。 –

回答

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 
+0

一些答案只是顯示心理能力... xD –

+0

我實際上只是用'post_request'來搜索,因爲我不知道它是什麼;) – User

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.]+\))/"); 

這將返回數組與你的價值觀。