2011-08-15 3 views
0

J'ai cette chaîne:php sscanf problème

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

et j'essaie d'extraire ces deux chiffres avec sscanf en php ainsi:

$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; 

mais cela ne me donne pas de résultat, ni erreurs que devrais-je changer?

cela fonctionne bien cette façon

sscanf("City Lat/Lon: (50.7708)/(6.1053)", "City Lat/Lon: (%f)/(%f)",$asd,$wer); 
+0

Indiquez votre code pour l'attribution de '$ sub'. –

+0

ok J'ai édité la question – TasostheGreat

+0

Je pense que votre code est bon pour 'sscanf'. Votre problème est l'analyse de vos données Lat/Long. Faites un 'echo $ sub 'et assurez-vous que c'est ce que vous attendez. –

Répondre

2

Il semble que vous utilisiez la fonction post_request() trouvée here.

Si tel est le cas, votre variable $sub contient diverses balises HTML trouvées dans la réponse. Par exemple, si vous essayez:

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

Au lieu de sscanf, vous pouvez essayer de faire correspondre la latitude et la longitude en utilisant une expression régulière (comme suggéré par @Headshota). Par exemple, une solution possible:

//... 

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

Certaines réponses ne montrent que des puissances psychiques ... xD –

+0

En fait je viens de googler 'post_request' parce que je n'avais aucune idée de ce que c'était;) – User

1

Works pour moi:

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

... impressions:

int(1) 
float(50.7708) 

L'erreur peut être dans votre code de test exact ou quelque part autre.

0

Utilisez le regex:

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

cela retourne un tableau avec vos valeurs.